7

以下 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

返回此错误:

消息 468,第 16 级,状态 9,第 4 行

无法解决等于操作Danish_Norwegian_CI_AS之间的排序规则冲突。SQL_Latin1_General_CP1_CI_AS

我尝试将此附加到查询中,但它仍然返回相同的错误:

COLLATE SQL_Latin1_General_CP1_CI_AS ASC

我怎样才能解决这个问题?

4

2 回答 2

2

在 WHERE 或 ON (JOIN) 子句中将以下内容添加到产生此错误的任何字段中: COLLATE DATABASE_DEFAULT.

例如(你上面的问题)

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
于 2014-02-26T11:24:09.843 回答
0

创建表格#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
于 2015-05-07T09:08:03.207 回答