从纯文本子查询将n列转换为定界字符串

时间:2019-01-03 16:14:19

标签: sql-server

这是用于Microsoft SQL Server 2016(SP1)-13.0.4001.0

我有一些烦人的数据,需要转换为逗号分隔的字符串。我的选择受到限制,因为它是一种第三方软件,可以代替我的查询中的文本并运行它。例如,我将编写以下内容:

SELECT %myvalues% for xml path('')

然后变成了:

SELECT 'test1','test2','test3'...'testn' for xml path('')

哪个返回

test1test2test3...testn

这有效,但是不会用逗号或空格分隔文本。这是我想要的结果:

test1, test2, test3, ... testn

问题是,我无法控制它如何插入文本。 我确实在许多其他解决方案中找到了STUFF函数,但是当我不知道列名时,似乎没有一个起作用。

例如,我得到:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最好的方法,但是我成功使用了以下方法:

IF OBJECT_ID('mytable', 'U') IS NOT NULL DROP TABLE mytable; 
CREATE TABLE mytable ("@remove@'mylist', 'Ofannoying', 'comma', 'seperated values'" INT NULL);
SELECT REPLACE(REPLACE((SELECT c.Name FROM sys.columns c INNER JOIN sys.objects o ON o.object_id = c.object_id WHERE o.name = 'mytable'), '''', ''), '@remove@', '')

我的实际代码如下:

CREATE TABLE mytable ("@remove@#myvalues#" INT NULL);