给出一个表格,例如:
表Person
:
id, name, last_name, age
1, joshua, smith, 33
2, melissa, fox, 65
3, james, bond, 31
...
我必须从表中读取每一行,获取当前行,连接其列名和值,然后最后将它们作为新行放入另一个表中。 E.g:
新表中的列concat_row
(varchar):
"name: joshua, last_name: smith, age: 33"
"name: melissa, last_name: fox, age: 65"
"name: james, last_name: bond, age: 31"
...
关键是,我需要使用通用查询,我不知道有多少列或它们的名称是什么,因为这个查询将用于数百个表...所以,它可能很有趣仅修改每个案例的表名。
答案 0 :(得分:0)
您可以使用以下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, 账户号码:AW00000001, rowguid:3F5AE95E-B87D-4AED-95B4-C3797AFCB74F,修订日期:9月12日 2014 11:15 AM CustomerID:2,PersonID:,StoreID:1028,TerritoryID:1, 账户号码:AW00000002, rowguid:E552F657-A9AF-4A7D-A645-C429D6E02491,修订日期:9月12日 2014 11:15 AM CustomerID:3,PersonID:,StoreID:642,TerritoryID:4, 账户号码:AW00000003, rowguid:130774B1-DB21-4EF3-98C8-C104BCD6ED6D,修订日期:9月12日 2014 11:15 AM CustomerID:4,PersonID:,StoreID:932,TerritoryID:4, 账户号码:AW00000004, rowguid:FF862851-1DAA-4044-BE7C-3E85583C054D,修订日期:9月12日 2014 11:15 AM CustomerID:5,PersonID:,StoreID:1026,TerritoryID:4, 账户号码:AW00000005, rowguid:83905BDC-6F5E-4F71-B162-C98DA069F38A,修订日期:9月12日 2014 11:15 AM