更新查询损坏字符



我的SQL更新正常工作,但它会更改土耳其字符。更新查询更改土耳其字符,例如ı至i等。这是我的查询:

set @updstatement = 'UPDATE ' + @table_name + ' SET ' + @text_col + '= ''' + @newText + ''' WHERE ' + @id_col + '= ''' + @cur_Id + '''';
                PRINT @updstatement
                exec sp_executesql @updstatement 
                PRINT 'Updated: ' + @cur_Id;

我尝试了COLLATE DATABASE_DEFAULTCOLLATE TURKISH_CI_AS选项,但没有任何更改。列的数据类型是NTEXT。Table数据库的整理设置为Latin1_General_CI_AS。表的整理设置为Latin1_General_CI_AS。列的整理设置为Latin1_General_CI_AS。在更新之前,我可以看到土耳其字符正确存储在表的列中。在更新后,列的查询数据被损坏。你有任何想法吗?

就像我在评论中所说的那样,不要将原始值注入您的动态SQL语句中。这是一个很大的SQL注入问题,没有任何借口去做。

我怀疑您正在使用varchar,并且使用非参数语句的组合正在引起问题。如果这无法解决问题,则需要提供一个复制问题的示例(请注意猜测的数据类型(:

DECLARE @table_name sysname,
        @textcol sysname,
        @newtext nvarchar(50), --Guessed datatype
        @id_col sysname,
        @cur_id int; --Guessed dataytpe
DECLARE @updstatement nvarchar(MAX);
SET @updstatement = 'UPDATE ' + QUOTENAME(@table_name) + N' SET ' + QUOTENAME(@text_col) + N' = @newtext WHERE ' + QUOTENAME(@id_col) + N' = @cur_id;';
PRINT @updstatement; --Your debugging friend
EXEC sp_executesql @SQL, N'@newtext nvarchar(50), @cur_id int', @newtext = @newtext, @cur_id = @cur_id;

最新更新