我的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_DEFAULT
和COLLATE 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;