我正在使用.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得到“??? ????”人物·为什么会这样?
答案 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ß дие Таль'