不同数据库之间的表进行操作时候,容易出现排序规则冲突的问题,就需要用到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
)