Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL查询排序问题_Sql Server_Tsql_Collation - Fatal编程技术网

Sql server SQL查询排序问题

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查询,类似于

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Ğ不在该代码页中