2013-03-02 4 views
-2

Je dois insérer des caractères russes dans une colonne.Comment insérer une valeur Unicode paramétrique dans SQL Server 2008?

Il peut être fait avec:

insert into tbl_test(name) 
values(N'ŞİĞİL') 

C'est juste, mais je dois faire quelque chose de SP comme @pName est un paramètre.

Ainsi,

insert into tbl_test(name) 
values([email protected]) 

est-ce pas une bonne syntaxe.

Y at-il un moyen avec le code ou avoir une option dans les options?

Merci.

+0

Le type de la colonne 'name' nvarchar (...) est-il également? – Phil

+0

oui c'est mais en voyant '????' –

+0

où voyez-vous '????' – Phil

Répondre

3

En utilisant nvarchar (string unicode) pour votre type de paramètre devrait faire l'affaire:

create procedure dbo.spAddName 
@name nvarchar(100) 
as 

insert into tbl_test(name) values(@name) 

GO 

MISE À JOUR

Apparemment, le problème semble être dans votre code d'appel, pas dans la définition de la procédure stockée qui est ce que les autres essayaient d'aider.

Voici un exemple complet de la façon dont on pourrait appeler la procédure stockée ci-dessus correctement, à la fois de t-sql et de C#.

-- create a test table 
create table dbo.tbl_test (
name nvarchar(100) NOT NULL 
) 
go 

-- prove that a simple insert succeeds 
insert into dbo.tbl_test (name) values (N'ŞİĞİL') 

-- simple select against the unicode column to return the characters verbatim 
select name from dbo.tbl_test 

-- execute the original stored procedure from t-sql 
dbo.spAddName N'ŞİĞİL' 

... et maintenant avec C# et ado.net, juste pour fournir un exemple d'invocation à partir du code de l'application. À l'avenir, vous serez plus susceptible de recevoir plus d'aide si vous êtes plus courtois envers ceux qui tentent de vous aider.

Bonne chance!

+0

Oui, c'est aussi nvarchar, mais les caractères russes voient comme '?????' –

+0

@ ErçinAkyüz: si ** both ** votre * paramètre * ainsi que * la colonne * du tableau sont en fait 'nvarchar' - alors il ne devrait pas y avoir de problème avec les caractères russes (cyrilliques). –

+0

Mais il y a un problème, vous devriez l'essayer avec une requête manuelle. –

-1

J'ai réalisé le problème, le classement doit être modifié pour les valeurs paramétriques. Essayez ces lignes, pas à pas.

ALTER DATABASE TEST SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE TEST COLLATE Cyrillic_General_100_CI_AS 

ALTER DATABASE TEST SET MULTI_USER 

Mais, s'il y a des dépendances dans DB,

ALTER DATABASE TEST COLLATE Cyrillic_General_100_CI_AS 

ne fonctionne pas. Vous devez supprimer les dépendances, puis essayez-le.

Merci.

+0

-1 Ce n'est pas le cas. Le classement ne fait aucune différence pour les caractères supportés pour les paramètres 'varchar' /' char' pas 'nvarchar' /' nchar' –

+0

Dans mon cas oui cela fait une différence.J'ai déclaré aucun varchar ou char, je déclare toujours nvarchar pour les chaînes . Et vous essayez toujours de ne pas comprendre l'inefficacité de N'text :) :) –

+1

Je peux vous assurer que si vous utilisez 'nvarchar' pour tous les paramètres et variables et le préfixe' N' pour tous les littéraux de chaîne ** vous ne le faites pas ** besoin de changer la collation. –

Questions connexes