简体   繁体   English

无法解决临时表和sys.objects之间的排序规则冲突

[英]Cannot resolve the collation conflict between temp table and sys.objects

The following T-SQL code: 以下T-SQL代码:

CREATE TABLE #exclude(name VARCHAR(256))
INSERT INTO #exclude VALUES('someprefix_someprocedure')

SELECT 'someschema.' + sys.objects.name
FROM sys.objects
  LEFT JOIN #exclude ON sys.objects.name = #exclude.name
WHERE sys.objects.name LIKE 'someprefix_%'
  AND type IN ('FN', 'TR', 'P')
  AND #exclude.name IS NULL
ORDER BY sys.objects.name ASC

Returns this error: 返回此错误:

Msg 468, Level 16, State 9, Line 4 消息468,第16层,状态9,第4行

Cannot resolve the collation conflict between Danish_Norwegian_CI_AS and SQL_Latin1_General_CP1_CI_AS in the equal to operation. 等于操作Danish_Norwegian_CI_ASSQL_Latin1_General_CP1_CI_AS之间的排序SQL_Latin1_General_CP1_CI_AS冲突。

I tried appending this to the query, but it still returns the same error: 我尝试将其附加到查询中,但仍返回相同的错误:

COLLATE SQL_Latin1_General_CP1_CI_AS ASC

How can I fix this? 我怎样才能解决这个问题?

Add the following to any field that produces this error, in the WHERE or ON (JOIN) Clause: COLLATE DATABASE_DEFAULT . 在WHERE或ON(JOIN)子句中,将以下内容添加到产生此错误的任何字段中: COLLATE DATABASE_DEFAULT

eg (Your Question Above) 例如(您上面的问题)

CREATE TABLE #exclude(name VARCHAR(255))
INSERT INTO #exclude VALUES('someprefix_someprocedure')

SELECT 'someschema.' + sys.objects.name
FROM sys.objects
  LEFT JOIN #exclude ON sys.objects.name COLLATE DATABASE_DEFAULT = #exclude.name COLLATE DATABASE_DEFAULT
WHERE sys.objects.name LIKE 'someprefix_%'
  AND type IN ('FN', 'TR', 'P')
  AND #exclude.name IS NULL
ORDER BY sys.objects.name ASC

When you create the table #exclude , you'll need to add COLLATE DATABASE_DEFAULT to any text fields - as below: 创建表#exclude ,需要将COLLATE DATABASE_DEFAULT添加到任何文本字段-如下所示:

CREATE TABLE #exclude(name VARCHAR(256) COLLATE DATABASE_DEFAULT NULL)
INSERT INTO #exclude VALUES('someprefix_someprocedure')

SELECT 'someschema.' + sys.objects.name
FROM sys.objects
  LEFT JOIN #exclude ON sys.objects.name = #exclude.name
WHERE sys.objects.name LIKE 'someprefix_%'
  AND type IN ('FN', 'TR', 'P')
  AND #exclude.name IS NULL
ORDER BY sys.objects.name ASC

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM