Sql server SQL查询排序问题
我有一个select查询,类似于Sql server SQL查询排序问题,sql-server,tsql,collation,Sql Server,Tsql,Collation,我有一个select查询,类似于 SELECT itemCode, itemDefinition, clientCode, clientDefinition FROM Invoices 数据库中的发票表具有排序规则SQL\u Latin1\u General\u CP1\u CI\u AS 问题是,当我在程序中接收数据时,itemDefinition和clientDefinition列中的土耳其字符似乎不正确。例如,土耳其语字母Ğ变成其他字符,Ş变成其他字符等 有人能帮我
SELECT
itemCode,
itemDefinition,
clientCode,
clientDefinition
FROM
Invoices
数据库中的发票表具有排序规则SQL\u Latin1\u General\u CP1\u CI\u AS
问题是,当我在程序中接收数据时,itemDefinition和clientDefinition列中的土耳其字符似乎不正确。例如,土耳其语字母Ğ变成其他字符,Ş变成其他字符等
有人能帮我解决这个问题吗
谢谢
解决方案如下:首先,需要创建字符转换函数,如下所示:
CREATE FUNCTION [dbo].[ChangetoTRK](@A NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @TMP NVARCHAR(4000)
SET @TMP = REPLACE(@A COLLATE LATIN1_GENERAL_BIN, CHAR(208), N'Ğ')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(220), N'Ü')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(222), N'Ş')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(221), N'İ')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(214), N'Ö')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(199), N'Ç')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(73), N'I')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(240), N'ğ')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(252), N'ü')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(254), N'ş')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(105), N'i')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(246), N'ö')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(231), N'ç')
SET @TMP = REPLACE(@TMP COLLATE LATIN1_GENERAL_BIN, CHAR(253), N'ı')
RETURN @TMP
END
然后,我们在查询中使用它作为:
SELECT
itemCode,
dbo.ChangeToTRK(itemDefinition),
clientCode,
dbo.ChangeToTRK(clientDefinition)
从
发票您用于表格的数据类型是什么,您能提供表格模式吗?varchar100。。。对于列itemDefinition和clientDefinition使用nvarchar100,它将起作用。我不能,因为数据库属于一个ERP程序,我无权更改它…其他解决方案?SQL拉丁语1_General_CP1_CI_原样代码页1252Ğ不在该代码页中