给定一个表,例如:
表Person
:
id, name, last_name, age
1, joshua, smith, 33
2, melissa, fox, 65
3, james, bond, 31
...
我必须从表中读取每一行,获取当前行,并合并其列名和值,然后最后将它们作为新行放入另一个表中。例如:
concat_row
新表中的列(varchar):
"name: joshua, last_name: smith, age: 33"
"name: melissa, last_name: fox, age: 65"
"name: james, last_name: bond, age: 31"
...
关键是,我需要使用一个通用查询,在该查询中我不应该知道有多少列或它们的名字,因为该查询将与数百个表一起使用...因此,仅修改每个案例的表格名称。
您可以使用以下SQL并根据需要进行扩展,
USE AdventureWorks2014
DECLARE @OwnerName VARCHAR(50)
DECLARE @TblName VARCHAR(50)
SET @OwnerName = 'Sales'
SET @TblName = 'Customer'
DECLARE @Columns VARCHAR(MAX)
SET @Columns = ''
SELECT @Columns = @Columns + ('''' + Column_Name + ':'' + ISNULL(convert(VARCHAR(MAX),' + Column_Name + '),'''') + '', '' + ')
FROM (
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TblName
) A
--PRINT @Columns
DECLARE @FinalSelect VARCHAR(max)
SELECT @FinalSelect = 'Select ' + LEFT(@Columns, LEN(@Columns) - 10) + ' Contact_Row From ' + @OwnerName + '.' + @TblName
--print @FinalSelect
EXEC (@FinalSelect)
输出是(前5行),
CustomerID:1,PersonID :、 StoreID:934,TerritoryID:1,AccountNumber:AW00000001,rowguid:3F5AE95E-B87D-4AED-95B4-C3797AFCB74F,ModifiedDate:Sep 12 2014 11:15 AM CustomerID:2,PersonID :、 StoreID:1028, TerritoryID:1,AccountNumber:AW00000002,rowguid:E552F657-A9AF-4A7D-A645-C429D6E02491,ModifiedDate:2014年9月12日11:15 AM CustomerID:3,PersonID :, StoreID:642,TerritoryID:4,AccountNumber:AW00000003,rowguid:130774B1 -DB21-4EF3-98C8-C104BCD6ED6D,ModifiedDate:2014年9月12日11:15 AM客户ID:4,PersonID :, StoreID:932,TerritoryID:4,AccountNumber:AW00000004,rowguid:FF862851-1DAA-4044-BE7C-3E85583C054D,ModifiedDate: 2014年9月12日11:15 AM客户ID:5,人员ID :、商店ID:1026,地区ID:4,帐号:AW00000005,行guid:83905BDC-6F5E-4F71-B162-C98DA069F38A,修改日期:2014年9月12日11:15 AM
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句