在 SQL 服务器排序顺序中带有“?”字母的错误排序顺序字符串
Wrong sort order string with "ک" letter in SQL Server sort order
我在 SQL 服务器查询和波斯语中遇到 Order By
的问题。我无法很好地对波斯语文本进行排序。
我使用 NVarchar(X)
类型,即使是 select 和 Like 查询,一切都是正确的。但是当我尝试对字符串字段进行排序时,我看到字母“?”即使在“ь”字母之后也会出现在最后。现在我正在使用 Persian_100_CI_AS 排序规则。
例如
SELECT TOP (200) Id, Name
FROM Groups
ORDER BY Name DESC
结果是
ID Name
------------------------------
10071 کنترل کیفیت> مدیر
10018 کنترل کیفیت> پرسنل
在降序的情况下,前面的行不应留在第一行。
10040 وظایف - مدیریت
10031 واحد شبکه
10046 نیروی فنی - برق چاپ> پرسنل
10067 Iso 17025> پرسنل
10011 آزمایشگاه - فرمولها - شرایط خط - کنترل کیفیت - برنامه تولید - آمار - گزارش تولید
10043 آزمایشگاه - فرمولها - شرایط خط - کنترل کیفیت - آمار - گزارش تولید 2
我们将不胜感激。
您的字段的排序规则可能与您想象的不同。 运行 这个查询是为了查看您的数据库中有什么。他们是 Persian_100_CI_AS
吗?
DECLARE @defaultCollation NVARCHAR(1000)
SET @defaultCollation = CAST(
DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS NVARCHAR(1000)
)
SELECT C.Table_Name,
Column_Name,
Collation_Name,
@defaultCollation DefaultCollation
FROM Information_Schema.Columns C
INNER JOIN Information_Schema.Tables T
ON C.Table_Name = T.Table_Name
WHERE T.Table_Type = 'Base Table'
AND RTRIM(LTRIM(Collation_Name)) <> RTRIM(LTRIM(@defaultCollation))
AND COLUMNPROPERTY(OBJECT_ID(C.Table_Name), Column_Name, 'IsComputed') = 0
ORDER BY
C.Table_Name,
C.Column_Name
如果排序规则不同,运行 此查询会为您提供 Alter
语句 运行 它们并修复不兼容的排序规则问题。
DECLARE @defaultCollation NVARCHAR(1000)
SET @defaultCollation = CAST(
DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS NVARCHAR(1000)
)
select 'ALTER TABLE '
+ QUOTENAME(C.TABLE_SCHEMA)
+'.'+ QUOTENAME(C.Table_Name)
+' ALTER COLUMN ' +' [' +Column_Name+'] '
+ DATA_TYPE+'('+cast(character_maximum_length as varchar(10))+')' +' COLLATE Persian_100_CI_AS '
+(case IS_NULLABLE when 'YES' then 'NULL' else 'NOT NULL' end )+';'
FROM Information_Schema.Columns C
INNER JOIN Information_Schema.Tables T
ON C.Table_Name = T.Table_Name
WHERE T.Table_Type = 'Base Table'
AND RTRIM(LTRIM(Collation_Name)) <> RTRIM(LTRIM(@defaultCollation))
--AND DATA_TYPE='nvarchar'
AND character_maximum_length>0
ORDER BY
C.Table_Name,
C.Column_Name
我在 SQL 服务器查询和波斯语中遇到 Order By
的问题。我无法很好地对波斯语文本进行排序。
我使用 NVarchar(X)
类型,即使是 select 和 Like 查询,一切都是正确的。但是当我尝试对字符串字段进行排序时,我看到字母“?”即使在“ь”字母之后也会出现在最后。现在我正在使用 Persian_100_CI_AS 排序规则。
例如
SELECT TOP (200) Id, Name
FROM Groups
ORDER BY Name DESC
结果是
ID Name
------------------------------
10071 کنترل کیفیت> مدیر
10018 کنترل کیفیت> پرسنل
在降序的情况下,前面的行不应留在第一行。
10040 وظایف - مدیریت
10031 واحد شبکه
10046 نیروی فنی - برق چاپ> پرسنل
10067 Iso 17025> پرسنل
10011 آزمایشگاه - فرمولها - شرایط خط - کنترل کیفیت - برنامه تولید - آمار - گزارش تولید
10043 آزمایشگاه - فرمولها - شرایط خط - کنترل کیفیت - آمار - گزارش تولید 2
我们将不胜感激。
您的字段的排序规则可能与您想象的不同。 运行 这个查询是为了查看您的数据库中有什么。他们是 Persian_100_CI_AS
吗?
DECLARE @defaultCollation NVARCHAR(1000)
SET @defaultCollation = CAST(
DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS NVARCHAR(1000)
)
SELECT C.Table_Name,
Column_Name,
Collation_Name,
@defaultCollation DefaultCollation
FROM Information_Schema.Columns C
INNER JOIN Information_Schema.Tables T
ON C.Table_Name = T.Table_Name
WHERE T.Table_Type = 'Base Table'
AND RTRIM(LTRIM(Collation_Name)) <> RTRIM(LTRIM(@defaultCollation))
AND COLUMNPROPERTY(OBJECT_ID(C.Table_Name), Column_Name, 'IsComputed') = 0
ORDER BY
C.Table_Name,
C.Column_Name
如果排序规则不同,运行 此查询会为您提供 Alter
语句 运行 它们并修复不兼容的排序规则问题。
DECLARE @defaultCollation NVARCHAR(1000)
SET @defaultCollation = CAST(
DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS NVARCHAR(1000)
)
select 'ALTER TABLE '
+ QUOTENAME(C.TABLE_SCHEMA)
+'.'+ QUOTENAME(C.Table_Name)
+' ALTER COLUMN ' +' [' +Column_Name+'] '
+ DATA_TYPE+'('+cast(character_maximum_length as varchar(10))+')' +' COLLATE Persian_100_CI_AS '
+(case IS_NULLABLE when 'YES' then 'NULL' else 'NOT NULL' end )+';'
FROM Information_Schema.Columns C
INNER JOIN Information_Schema.Tables T
ON C.Table_Name = T.Table_Name
WHERE T.Table_Type = 'Base Table'
AND RTRIM(LTRIM(Collation_Name)) <> RTRIM(LTRIM(@defaultCollation))
--AND DATA_TYPE='nvarchar'
AND character_maximum_length>0
ORDER BY
C.Table_Name,
C.Column_Name