Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.


Scenario :
這個問題是我的存儲過程中用到臨時表時發生的。
應該是sql server 服務器的排序規則 (SQL_Latin1_General_CP1_CI_AS ) 與數據庫的排序規則(Chinese_PRC_CI_AS)不同導致的吧。

Solution :
在創建臨時表時在相應的字段定義加上Collate Database_Default ,問題就解決了。

如下:

USE [JointFrame2]
GO
/****** Object:  StoredProcedure [dbo].[Proc_enterprise_unified_sam]    Script Date: 2016/10/28 10:23:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--此存儲過程將名稱相似度大於80%的數據的主子記錄標識設置為初始值
ALTER PROCEDURE [dbo].[Proc_enterprise_unified_sam]
AS
--===============================================================================

  BEGIN
    DECLARE
      @id             VARCHAR(40),   --記錄ID
      @psname         VARCHAR(220),  ---污染源名稱
      @region_code    VARCHAR(20),   --污染源區域編碼
      @i              BIGINT            --記錄執行
      set @i = 0
      --創建臨時表,用於存放相似度大於80%的數據
      create table #temp1(
    --加上COLLATE datebase_default NULL是為了避免此錯誤 id
varchar(50) COLLATE database_default NULL ) -- 定義游標. DECLARE mycursor CURSOR FOR --查找出未統一的污染源信息的區域編碼和污染源名稱 select id,region_code,psname from t_unified_enterprise_info where main_or_child = 1 and system_source != 0 --打開游標 OPEN mycursor --填充數據 FETCH NEXT FROM mycursor INTO @id,@region_code,@psname --判斷游標的狀態 -- 0 fetch語句成功 ---1 fetch語句失敗或此行不在結果集中 ---2 被提取的行不存在 WHILE @@FETCH_STATUS = 0 BEGIN set @i = @i + 1 print @i insert into #temp1 select id from ( select * from ( SELECT id,psname,dbo.FN_Resemble(@psname,psname) as a1,dbo.FN_Resemble(psname,@psname) as b1 FROM [dbo].[t_unified_enterprise_info] where region_code =@region_code)u where u.a1>=0.6) uu where (uu.a1+uu.b1)/2>0.8 --如果相似度大於80%的數據在臨時表中的條數大於1,則將他們全部置為初始值 if((select count(id) from #temp1)>1) BEGIN update t_unified_enterprise_info set main_or_child = 0,parentid = NULL,unique_code = NULL where system_source != 0 and id in (select id from #temp1) END delete from #temp1 --用游標去取下一行記錄 FETCH NEXT FROM mycursor INTO @id,@region_code,@psname END --關閉游標 CLOSE mycursor --刪除游標 DEALLOCATE mycursor END --exec [Proc_enterprise_unified_sam]

比較相似度的函數:

點擊查看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM