在ERP里面有个仓库的固定默认库位(Fixed Location)表,结构如下:
WarehouseCode, ItemCode, LocationCode
同一个仓库里的料号,可以允许设置多个固定库位,可以设置优先级来区分。
现在需要把一个物料在一个仓库的固定库位取出来,多个的时候用,分割连接在一起。
SELECT WarehouseCode,ItemCode,LocationCode = (
STUFF((SELECT ',' + LocationCode FROM WMS_DefaultLocation WHERE WarehouseCode = A.WarehouseCode AND ItemCode = A.ItemCode AND Enabled = 1 AND DeletionStateCode = 0 ORDER BY LocationCode ASC FOR XML PATH('')),1,1,'')
) FROM WMS_DefaultLocation AS A WHERE A.Enabled = 1 AND A.DeletionStateCode = 0 GROUP BY WarehouseCode,ItemCode
这里用到了STUFF和 FOR XML PATH,本文主要介绍STUFF。
用法及详解
STUFF(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。
1、param1:一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
2、startIndex:一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。
3、length:一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最后一个字符。length 可以是 bigint 类型。
4、param2,返回类型。如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。