Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将列连接成字符串_Sql Server_Xml_Tsql_Xpath - Fatal编程技术网

Sql server 将列连接成字符串

Sql server 将列连接成字符串,sql-server,xml,tsql,xpath,Sql Server,Xml,Tsql,Xpath,我认为我需要更好地理解XML路径,以使其正常工作。也许你能帮我举个简单的例子: 给定 我想把@phn.Phone中的所有行都改成一个VARCHAR,如果它只是Python的话,应该是 SET @p = ', '.join(@phn.Phone) # Alas SELECT DISTINCT @p = Phone+', ' FROM @phn FOR XML PATH('') 现在,这个在一定程度上起作用: SELECT DISTINCT Phone+', ' FROM @phn FOR XM

我认为我需要更好地理解XML路径,以使其正常工作。也许你能帮我举个简单的例子:

给定

我想把@phn.Phone中的所有行都改成一个VARCHAR,如果它只是Python的话,应该是

SET @p = ', '.join(@phn.Phone) # Alas
SELECT DISTINCT @p = Phone+', ' FROM @phn FOR XML PATH('')
现在,这个在一定程度上起作用:

SELECT DISTINCT Phone+', ' FROM @phn FOR XML PATH('')
==> 204-721-1532, 204-728-3852, 306-922-2058, 
后面有逗号,但没问题。我需要的是将这个结果放入一个VARCHAR变量中,比如

SET @p = ', '.join(@phn.Phone) # Alas
SELECT DISTINCT @p = Phone+', ' FROM @phn FOR XML PATH('')
但这是不允许的(msg6819,level16,state3,第45行/FOR-XML子句在赋值语句中是不允许的。)


最后,这将进入一个标量函数,我希望该函数返回连接的字符串。

您不需要XML路径,只需选择即可

DECLARE @p VARCHAR(200)
DECLARE @phn TABLE (Phone VARCHAR(25))
INSERT INTO @phn VALUES('204-721-1532')
INSERT INTO @phn VALUES('306-922-2058')
INSERT INTO @phn VALUES('204-728-3852')


SET @p = ''
SELECT @p = @p + phone + ', '  from @phn

SELECT @P

如何处理空值取决于您。你可以

  • 添加
    合并(电话,”)
  • 当phone不为null时,使用case语句
    case,然后使用phone+',“ELSE”结束
  • 使用where
    where电话不为空
  • 甚至是
    CONCAT\u NULL\u产生了\u NULL=OFF
    ,但这应该是不赞成的

    • 我认为这就是您需要的: