2017-08-13 26 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

感谢名单,你的第一个建议工作过:) –