簡體   English   中英

無法解決臨時表和sys.objects之間的排序規則沖突

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

以下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_ASSQL_Latin1_General_CP1_CI_AS之間的排序SQL_Latin1_General_CP1_CI_AS沖突。

我嘗試將其附加到查詢中,但仍返回相同的錯誤:

COLLATE SQL_Latin1_General_CP1_CI_AS ASC

我怎樣才能解決這個問題?

在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

創建表#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