N'INSERT INTO vs INSERT INTO

时间:2014-05-13 14:59:02

标签: sql-server unicode character insert-into

我正在使用.Net的自定义库来访问sql server。

此库正在服务器中执行此查询:

exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2) 
   VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)', 
   @const795=1803496, @const796='ÄÅÉæÆôöòÇ Münchenß дие Таль'

结果:

Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß ??? ????

如果我手动执行此查询:

INSERT INTO Testable (testcolumn1, testcolumn2) 
VALUES (1803496,N'ÄÅÉæÆôöòÇ Münchenß дие Таль')

结果:

Column 1 : 1803496
Column 2 : ÄÅÉæÆôöòÇ Münchenß дие Таль

N'INSERT INTO不应该将参数存储在UniCode编码中吗?为什么第二个查询保存“диеТаль”并且第一个查询没有?

第2列是nvarchar类型,列的排序规则是Latin1_General_CI_AS。

另一方面,我有另一个问题,因为库真正发送:

exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2)
  VALUES (@const795, @const796) ',N'@const795 int,@const796 nvarchar(50)',
  @const795=1803496, @const796= 'ÄÅÉæÆôöòÇ Münchenß ??? ????'

带问号而不是俄文字符。我知道,因为我使用SQL分析器来“嗅探”来自库的查询。

从库中调试查询我可以看到此“диеТаль”字符的正确值,直到将查询发送到数据库。但是sql profiler得到“??? ????”人物·为什么会这样?

1 个答案:

答案 0 :(得分:0)

当您将@ const796设置为某个值时,库需要指定“N”。 @const796=N'ÄÅÉæÆôöòÇ Münchenß дие Таль'

 exec sp_executesql N'INSERT INTO Testable (testcolumn1, testcolumn2) 
    VALUES (@const795, @const796) ', N'@const795 int, @const796 nvarchar(50)', 
    @const795=1803496, @const796=N'ÄÅÉæÆôöòÇ Münchenß дие Таль'