2017-02-09 94 views
-1

我有下面的代码和我收到以下错误:排序规则冲突的非加入T-SQL代码

Msg 468, Level 16, State 9, Line 37 
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS_KS_WS" in the equal to operation. 

我应该怎么做才能解决这个问题?我在网上找到的所有东西都与连接的表格有关。

IF OBJECT_ID('SeanVault.dbo.TempVarIDs', 'U') IS NOT NULL 
     DROP TABLE SeanVault.dbo.TempVarIDs; 
    Select VariableID, VariableName 
    INTO SeanVault.dbo.TempVarIDs 
    from Variable 
      Where VariableName in (select VariableName from SeanVault.dbo.TempVarNames) 
+0

'如果VARIABLENAME中(选择SeanVault.dbo.TempVarNames VARIABLENAME)COLLATE SQL_Latin1_General_CP1_CI_AS' – Lamak

+0

@Lamak为什么这是一个评论,而不是答案吗? – iamdave

+0

@iamdave因为代码只有答案不是一个好答案......而且我有点累,所以我不想写出什么才能使它成为一个好答案 – Lamak

回答

0

您的两列VariableID和VariableNames具有不同的排序规则。您可以绕过整理配置(如果你不控制,例如你的数据模型),通过提供一个明确的归类:

IF OBJECT_ID('SeanVault.dbo.TempVarIDs', 'U') IS NOT NULL 
    DROP TABLE SeanVault.dbo.TempVarIDs; 
Select VariableID, VariableName 
INTO SeanVault.dbo.TempVarIDs 
from Variable 
Where VariableName COLLATE SQL_Latin1_General_CP1_CI_AS in (select VariableName COLLATE SQL_Latin1_General_CP1_CI_AS from SeanVault.dbo.TempVarNames) 

一个长期的解决办法是改变你列的定义,并添加所需的整理:

ALTER TABLE Variable 
     ALTER COLUMN VariableID COLLATE SQL_Latin1_General_CP1_CI_AS 
GO 

    ALTER TABLE TempVarNames 
     ALTER COLUMN TempVarNames COLLATE SQL_Latin1_General_CP1_CI_AS 
GO 
+0

完美!谢谢你的工作。这些表是临时使用的表,并在程序运行后丢弃,所以我认为我不会去ALTER路由。 – SeanDon