无法解决 SELECT 语句中第 2 列的排序规则冲突

Cannot resolve collation conflict for column 2 in SELECT statement

下面的 SQL 语句给我一个“无法解决 SELECT 语句中第 2 列的排序规则冲突”。错误。

我可以看出罪魁祸首是 RTRIM(TABLE_ONE.AUT_NAME),因为如果我删除它,该语句就会起作用。但是,如果我在它之前使用 COLLATE,则会出现语法错误。我该如何解决这个问题?谢谢

SELECT NRS, RTRIM(STR_DES) + ', ' + RTRIM(TABLE_TWO.TO_NA) 
        AS FT_NAME, KEYWORDS = CAST(NRS AS VARCHAR(15)) + ' ' + RTRIM(STR_DES) + '' + 
        RTrim(TABLE_THREE.LC_NAME) + ' ' + RTRIM(TABLE_TWO.TO_NA) + '' + 
        RTRIM(TABLE_ONE.AUT_NAME) 
        From NSG_STR INNER Join TABLE_TWO On TABLE_TWO.TN_UID = NSG_STR.TN_UID INNER Join 
        TABLE_THREE ON TABLE_THREE.LCT_UID = NSG_STR.LCT_UID INNER JOIN TABLE_ONE ON TABLE_ONE.AUT_UID = NSG_STR.AUT_UID 
        WHERE CAST(NRS As VARCHAR(15)) + ' ' + RTRIM(STR_DES) + ' ' + RTRIM(TABLE_THREE.LC_NAME) + ' ' + RTRIM(TABLE_TWO.TO_NA) + '' + 
        RTrim(TABLE_ONE.AUT_NAME) COLLATE DATABASE_DEFAULT LIKE '%3%'

运行 在您的代码之前:

declare @db_collation nvarchar(100) = (select cast( databasepropertyex(db_name(),'collation') as nvarchar) )
declare @altertablequery nvarchar(500)
set @altertablequery = '
alter table NSG_AUTHORITY alter column AUTHORITY_NAME nvarchar (max) collate '+@db_collation+';'
exec (@altertablequery)

更好的答案是简单地将 "COLLATE DATABASE_DEFAULT" 添加到您的查询中,这根本不需要修改架构。

SELECT USRN, RTRIM(STREET_DESCRIPTOR) + ', ' + RTRIM(NSG_TOWN.TOWN_NAME) 
        AS FEATURE_NAME, KEYWORDS = CAST(USRN AS VARCHAR(15)) + ' ' + RTRIM(STREET_DESCRIPTOR) + '' + 
        RTrim(NSG_LOCALITY.LOCALITY_NAME) + ' ' + RTRIM(NSG_TOWN.TOWN_NAME) + '' + 
        RTRIM(NSG_AUTHORITY.AUTHORITY_NAME) COLLATE DATABASE_DEFAULT
        From NSG_STREET INNER Join NSG_TOWN On NSG_TOWN.TOWN_UID = NSG_STREET.TOWN_UID INNER Join 
        NSG_LOCALITY ON NSG_LOCALITY.LOCALITY_UID = NSG_STREET.LOCALITY_UID INNER JOIN NSG_AUTHORITY ON NSG_AUTHORITY.AUTHORITY_UID = NSG_STREET.AUTHORITY_UID 
        WHERE CAST(USRN As VARCHAR(15)) + ' ' + RTRIM(STREET_DESCRIPTOR) + ' ' + RTRIM(NSG_LOCALITY.LOCALITY_NAME) + ' ' + RTRIM(NSG_TOWN.TOWN_NAME) + '' + 
        RTrim(NSG_AUTHORITY.AUTHORITY_NAME) COLLATE DATABASE_DEFAULT LIKE '%3%' COLLATE DATABASE_DEFAULT

您只需在任何引用它的地方使用它,并与您比较的所有东西一起使用(为了安全起见)。