【发布时间】:2014-02-15 09:55:43
【问题描述】:
我无法更新临时表。这是我的查询
CREATE TABLE #temp_po(IndentID INT, OIndentDetailID INT, OD1 VARCHAR(50), OD2 VARCHAR(50),
OD3 VARCHAR(50), ORD VARCHAR(50), NIndentDetailID INT, ND1 VARCHAR(50), ND2 VARCHAR(50),
ND3 VARCHAR(50), NRD VARCHAR(50), Quantity DECIMAL(15,3))
INSERT INTO #temp_po(IndentID, OIndentDetailID, OD1, OD2, OD3, ORD)
SELECT ID.IndentID, ID.IndentDetailID, ID.D1, ID.D2, ID.D3, ID.RandomDimension
FROM STR_IndentDetail ID WHERE ID.IndentID = @IndentID
UPDATE
t
SET
t.ND1 = CASE WHEN D.D1 = '' THEN NULL ELSE D.D1 END,
t.ND2 = CASE WHEN D.D2 = '' THEN NULL ELSE D.D2 END,
t.ND3 = CASE WHEN D.D3 = '' THEN NULL ELSE D.D3 END,
t.NRD = CASE WHEN D.RandomDim = '' THEN NULL ELSE D.RandomDim END,
t.Quantity = D.PurchaseQty
FROM
#temp_po t INNER JOIN @detail D ON D.IndentDetailID = t.OIndentDetailID
WHERE
t.IndentID = @IndentID
但它给出了错误
无法解决等于操作中“Latin1_General_CI_AI”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。
如何解决这个问题?
我的tempdb 排序规则是Latin1_General_CI_AI,而我的实际数据库排序规则是SQL_Latin1_General_CP1_CI_AS。
【问题讨论】:
-
正如@StuartLC 下面所说,这是您的列排序规则(可能是从数据库继承的)和 master 之间的冲突,因为 tempdb 默认为 master db 的排序规则。最简单的解决方案是将 COLLATE DATABASE_DEFAULT 附加到每个 (n)char/(n)varchar 数据类型,以便始终创建临时表以匹配您正在使用的数据库。
标签: sql sql-server collation tempdb