更新查询损坏字符

update query corrupts characters

我的 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。 table 的整理设置为 Latin1_General_CI_AS。列的整理设置为 Latin1_General_CI_AS。在更新之前,我可以看到土耳其语字符已正确存储在 table 的列中。列的更新查询数据损坏后。你有什么想法吗?

正如我在评论中所说,不要将原始值注入动态 SQL 语句。这是一个很大的 SQL 注入问题,没有理由这样做。

我怀疑您使用的是 varchar 并且结合使用 non-parametrised 语句导致了问题。如果这不能解决问题,您需要提供一个复制问题的示例(注意猜测的数据类型):

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;