话不多说上代码
--声明表变量
DECLARE @Production TABLE (
ID UNIQUEIDENTIFIER NOT NULL,
ProductionNo NVARCHAR(100) NOT NULL
)
--插入数据
INSERT INTO @Production
SELECT TOP 5
WorkOrderID ,
WorkOrderNo
FROM @Production1
--查询表变量数据
SELECT * FROM @Production
此处作为测试声明了表变量@Production,使用表变量作测试表进行测试;
在日常工作或者学习中可替换为已创建的表;
现在表中已有数据,接下来进行数据合并,需要用到STUFF函数和FOR XML PATH函数;
--声明表变量
DECLARE @Production TABLE (
ID UNIQUEIDENTIFIER NOT NULL,
ProductionNo NVARCHAR(100) NOT NULL
)
--插入数据
INSERT INTO @Production
SELECT TOP 5
WorkOrderID ,
WorkOrderNo
FROM @Production1
SELECT * FROM @Production
--DECLARE @WorkOrderNo NVARCHAR(100)
--SET @WorkOrderNo ='120000006930'
SELECT ProductionBatchNo = (
stuff(
(
SELECT
',' + CAST (ProductionNo AS VARCHAR)
FROM @Production
GROUP BY ProductionNo
FOR xml path ('')
),
1,1, ''
)
)
通过STUFF函数和FOR XML PATH函数实现了多行数据转换为一行的功能.
FOR XML PATH('') 函数将查询结果集以XML形式展现,将多行的结果,展示在同一行。
EG:
SELECT
',' + CAST (ProductionNo AS VARCHAR)
FROM @Production
GROUP BY ProductionNo
FOR xml path ('')
STUFF() 函数删除字符串的一部分,然后将另一部分插入到字符串中,从指定位置开始。
实例
从字符串中删除3个字符,从位置1开始,然后在位置1插入"HTML";
SELECT STUFF('SQL Tutorial', 1, 3, 'HTML');