联接操作中的问题

时间:2015-01-13 15:03:49

标签: sql sql-server sql-server-2008

我已经创建了存储过程,如下面的代码行

    ALTER PROCEDURE [dbo].[prJurisdictionFetchForAgentLicence]
@AgentId int
As
Declare @individual varchar(20) = null;

Create table #Split 
(
Jurisdiction nvarchar(max)
)
Insert into #Split select Jurisdiction from tbLicence where AgentId =@AgentId;

Select * from #Split;

DECLARE @products VARCHAR(MAX)='';

SELECT @products += Isnull(Jurisdiction, '') + ',' FROM   #Split;

SELECT right(@products,len(@products)-1); 

Create table #TempJurisdiction
(
JurisdictionX nvarchar(max)
);

Insert into #TempJurisdiction 
SELECT 
 Split.a.value('.', 'VARCHAR(MAX)') AS TempJurisdictiom
FROM  
(
SELECT CAST ('<M>' + REPLACE(@products, ',', '</M><M>') + '</M>' AS XML) AS CVS 
) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a);

Select * from #TempJurisdiction;

SELECT L.Jurisdiction,
L.JurisdictionX
FROM   tbJurisdiction L
JOIN #TempJurisdiction P
ON P.JurisdictionX = L.JurisdictionX

执行此存储过程时抛出错误消息

  

无法解决之间的排序规则冲突   &#34; SQL_Latin1_General_CP1_CI_AS&#34;和Latin1_General_CI_AI&#34;在平等   操作。

1 个答案:

答案 0 :(得分:1)

您的排序规则应该类似,只需更改表格中比其他数据库表格“更不正常”的排序规则

select *
from table1
join table2 on (table1.field collate SQL_Latin1_General_CP1_CI_AS = table2.field)

作为一个例子。我的猜测是你的tempDb与你的SP所在的DB有不同的校对,这就是你得到这个问题的原因 - 只是一个猜测。

以下是与您的问题相关的博文:http://blog.sqlauthority.com/2007/06/11/sql-server-cannot-resolve-collation-conflict-for-equal-to-operation/

基本上你的一个校对声明“重音不敏感”(AI),而另一个声明“重音敏感”(AS) - 试图比较不同校对之间的相等性,比如这个,你可能会看到为什么错误会抛出而没有使整理相似。