使用动态SQL查询时,db中不显示土耳其语字符

时间:2017-08-13 15:35:34

标签: sql sql-server tsql dynamic-sql turkish

我有一个关于Turksih角色的问题

我正在使用动态sql查询,当我看到表中的土耳其字符显示在英文Charter等中时,'s'被看到而不是'''。 当我没有使用动态查询时,我没有任何问题。

但我必须使用动态查询。我的疑问是:

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 

1 个答案:

答案 0 :(得分: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