SQL_排序规则

20 阅读1分钟

​ 不同数据库之间的表进行操作时候,容易出现排序规则冲突的问题,就需要用到Collate Database_Default。

​ Collate XXX 操作可以用在字段定义或使用时,它会将字段定义或转换成XXX 的排序规则格式。而Collate Database_Default 则会将字段定义或转换成当前数据库的默认排序规则,从而解决冲突。

1.情景一:

​ 比如在下面的代码中便使用了Collate Database_Default 来解决字段在equal操作中的排序规则冲突:

Insert into Security.Report (Name)
Select C.Path 
From SSRS.Catalog C 
Where C.Path Collate Database_Default Like @ReportPath + '/%'  And
	  C.Path Collate Database_Default Not In(Select Name From Security.Report R)

--或

SELECT 1 FROM Shipment_Package AS P 
INNER JOIN Shipment_Unit AS U ON P.CustomerID Collate Database_Default=U.CustomerID AND P.ShipmentNo Collate Database_Default=U.REFNM2 AND P.PalletID Collate Database_Default=U.PalletID 
WHERE P.CustomerID='TEA' AND P.ShipmentNo='2021568752' AND P.Shipmark='4AK8752' AND U.QMS_BoxID='B1TH2ZZZ018G1BUS055731'

--注:用在等号之前

2.情景二:

​ 当然,在创建临时表时若对字段定义加上Collate Database_Default ,也可以方便地解决潜在的排序规则冲突,比如上一节中提到的存储过程,只要做如下修改即可。

CREATE TABLE #TagsTable
(
    TagName NVARCHAR(64) COLLATE DATABASE_DEFAULT,
    TagLabel Nvachar(64) COLLATE DATABASE_DEFAULT
)