Search code examples
sqlsql-servert-sqldynamic-sqlturkish

Turkish Characters aren't shown in db when i use dynamic SQL Query


I've a problem that is about Turksih Characters

I'm using dynamic sql query,when i saw the table Turkish Character is shown in English Charter etc. 's' is seen instead of'ş'. When I didn't use Dynamic Query, I haven't any problem.

But I have to use Dynamic Query. My query is:

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 

Solution

  • First of all you should display sql query:

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

    Possible scenarios:

    1) Your variable is set as VARCHAR():

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

    should be:

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

    Rextester Demo

    2) Your column in table does not allow to store specific characters:

    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