2017-08-13 179 views
1

我有一個問題,是關於Turksih人物土耳其的字符不以dB所示,當我使用動態SQL查詢

我使用動態sql查詢,當我看到土耳其字符是英文顯示的表憲章等'的'被看到而不是'ş'。 當我沒有使用動態查詢時,我沒有任何問題。我不得不使用動態查詢。我的查詢是:

declare @sql nvarchar(max) 
SET @Sql = concat('insert into ewrim.', QUOTENAME(@Tc), 
    '(', QUOTENAME(@sutunadi1),',',QUOTENAME(@sutunadi2) ,', gun, ay, yil, saat, dakika, islem) ' 
     ,'VALUES (' , @ilk_agirlik,',' , @son_agirlik ,',',convert(varchar(2),day(GETDATE())) ,',',convert(varchar(2),month(GETDATE())) ,',' , convert(varchar(4),year(GETDATE())) ,',' , convert(varchar(2),datepart(hh,GETDATE())) ,',' , convert(varchar(2),datepart(mi,GETDATE())) ,',' , char(39), @islem,char(39) ,')') 
EXECUTE sp_executesql @Sql 

回答

2

首先,你應該顯示SQL查詢:

declare @sql nvarchar(max) 
SET @Sql = concat('insert into ewrim.',... 
SELECT @sql; 

可能的情景:

1)您的變量設置爲VARCHAR()

DECLARE @s VARCHAR(10) = 'ş'; 
SELECT @s; 
-- s 

應該是:

DECLARE @s2 NVARCHAR(10) = N'ş'; 
SELECT @s2; 
-- ş 

Rextester Demo

2)你的表列不允許存​​儲特定的字符:

DECLARE @s2 NVARCHAR(10) = N'ş'; 

DECLARE @t TABLE (col VARCHAR(10)); -- it depends on locale 
INSERT INTO @t(col) VALUES (@s2); 

SELECT * FROM @t; 
-- s 

Rextester Demo2

+0

感謝名單,你的第一個建議工作過:) –