如何连接SQL Server 2005中的所有列值?

时间:2016-01-14 20:13:46

标签: sql sql-server csv concatenation

我需要一个查询,它返回连接的列的值以及字符串数据类型中的单引号,例如INSERT INTO STATEMENT,并考虑它们各自的数据类型。

例如,sql server中的表看起来像这样

String  String                  Int
------------------------------------

000001  TUBO BUM 8 X 400 GRS    93,6
000002  TUBO BUM 2 X 50 GRS     10,6
000003  TUBO BUM 5 X 40 GRS     11,6

我需要的结果如下

'000001','TUBO BUM 8 X 400 GRS', 93.6
'000002','TUBO BUM 8 X 50 GRS', 10.6
'000003','TUBO BUM 8 X 40 GRS', 11.6

就像插入声明一样。

我需要为表格的所有列动态执行此操作。

我研究过,我看到需要咨询sys.columns吗?

谢谢!!!

3 个答案:

答案 0 :(得分:1)

http://www.aha-soft.com/faq/q18.htm是一个github项目,用于自动生成表的insert语句的解决方案。

答案 1 :(得分:0)

使用以下脚本。它生成插入语句。

declare @sql varchar(max) = (select STUFF((SELECT ', ' + C.name
            FROM sys.columns C
            WHERE object_id = object_id('MyTable')
            FOR XML PATH('')), 1, 2, ''))

declare @data varchar(max) = 'SELECT ''INSERT INTO MyTable (xx5xx) VALUES ('' + ''vx5xv'' + CAST(' + @sql + ' as varchar) + ''vx5xv'' + '')'' FROM MyTable'
set @data = replace(@data, ', ',  ' as varchar) + ''vx5xv'' + '', '' + ''vx5xv'' + CAST(')
set @data = replace(replace(@data, 'xx5xx', @sql), 'vx5xv', '''''')
print @data

exec(@data) 

答案 2 :(得分:0)

太简单了,

DECLARE @ISIN NVARCHAR(MAX) = ''
SELECT TOP 20 @ISIN += CONCAT(ISIN, ', ') FROM #WBO_TEMP_TBL_CLASS_DATA
SELECT @ISIN