Temp Table排序规则冲突 – 错误:无法解决Latin1 *和SQL_Latin1
发布时间:2020-12-12 16:47:12 所属栏目:MsSql教程 来源:网络整理
导读:我无法更新临时表.这是我的查询 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),Quantit
我无法更新临时表.这是我的查询
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 但它给出错误
如何解决这个问题? 我的tempdb归类是Latin1_General_CI_AI,我的实际数据库归类是SQL_Latin1_General_CP1_CI_AS. 解决方法这是因为#tempdb.temp_po.OD1和STR_IndentDetail.D1上的归类不同.由于您可以控制临时表的创建,因此最简单的解决方法似乎是在临时表中创建* char列,其格式与STR_IndentDetail表相同: CREATE TABLE #temp_po( IndentID INT,OD1 VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS,.. Same for the other *char columns 在您无法控制表创建的情况下,当您加入列时,另一种方法是在DML中添加明确的COLLATE语句,其中出现错误,通过COLLATE SQL_Latin1_General_CP1_CI_AS或更容易,使用COLLATE DATABASE_DEFAULT SELECT * FROM #temp_po t INNER JOIN STR_IndentDetail s ON t.OD1 = s.D1 COLLATE SQL_Latin1_General_CP1_CI_AS; 或者,更容易 SELECT * FROM #temp_po t INNER JOIN STR_IndentDetail s ON t.OD1 = s.D1 COLLATE DATABASE_DEFAULT; SqlFiddle here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |