2014-05-13 159 views
0

我正在使用.Net的自定義庫訪問sql服務器。N'INSERT INTO與INSERT INTO

該庫正在執行的服務器此查詢:

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

當您將@ 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ß дие Таль' 
+0

謝謝格拉克斯。 –