是否可以在字符串中连接表的所有列,包括它们的列名?
此question中的第二个(未标记的答案)非常有趣,可能会进一步更改(可能会加入INFORMATION_SCHEMA.COLUMNS
)。
如果表有3列(id,name,amount),则输出应为:
id=1;name=something;amount=100
该语句应该是通用的,因为表的列数不同。
答案 0 :(得分:2)
这应该适合你:
DECLARE @query NVARCHAR(max)
DECLARE @columns NVARCHAR(max)
DECLARE @table NVARCHAR(max)
SET @table = 'tableName'
SELECT @columns = stuff((
SELECT ', ''' + sc.NAME + '=''' + '+ CAST(' + sc.NAME + ' AS NVARCHAR(MAX))'
FROM sys.columns sc
INNER JOIN sys.tables st ON sc.object_id = st.object_id
WHERE st.NAME = @table
FOR XML path('')
), 1, 1, '')
SELECT @query = 'select ' + @columns + ' from ' + @table
EXEC sp_executesql @query
代码基本上是根据要为其执行此操作的表的所有列创建动态查询的代码。
要准确查看将执行的查询,您可以添加:
在SELECT @query
命令之前 EXEC
,这将打印代码。
创建查询后,它只在最后一部分EXEC sp_executesql
执行它。
答案 1 :(得分:0)
如果它只有3列,我会在sql中进行硬编码:
SELECT 'id='+ ISNULL(CAST(id as varchar(10)), '') +
';name='+ ISNULL(name, '') +
';amount='+ ISNULL(CAST(amount as varchar(10)), '')
FROM table
WHERE Condition
我对硬编码解决方案与通用解决方案的推理是代码的性能和可读性。如果你有10个或更多列,我会用sys.Columns表加入problaby并使它更通用。