1

假设我的 SQL Server 表中有两行,如下所示

Id  Name    Address
---------------------
1   Kamal   Kathmandu
2   Rahul   Pokhara

我想将这两行存储为这样的单个字符串,

1,Kamal,Kathmandu@2,Rahul,Pokhara
4

5 回答 5

2

尝试使用此查询。

declare @str varchar(max)
SET @str=STUFF((SELECT 
                    '@'+cast(Id as varchar)+','+Name+','+Address
                FROM tablename

                ORDER BY '@'+Id
                FOR XML PATH('')),1, 1, '')
print @str
于 2013-05-22T09:51:37.950 回答
2
DECLARE @xml XML = (SELECT *,'@' as Sep FROM YourTable FOR XML PATH(''))

SELECT Replace(Replace(stuff((SELECT ',' + node.value('.', 'varchar(max)')
              FROM   @xml.nodes('/*') AS T(node)
              FOR XML PATH(''), type).value('.','varchar(max)')
              , 1, 1, ''),',@,','@'),',@',''); 
于 2013-05-22T09:38:08.703 回答
1
DECLARE @ResultString varchar(max)
SET @ResultString = ''


SELECT @ResultString = @ResultString + cast(Id as varchar) + ',' 
                       + Name + ',' + Address + '@'
FROM yourTable

SELECT @ResultString

@ResultString 将包含单个逗号分隔的字符串 1,Kamal,Kathmandu@2,Rahul,Pokhara

于 2013-05-22T09:45:24.743 回答
1

好吧,这是个坏主意,你做错了什么,但是......

DECLARE @badIdea nvarchar(max);
SET @badIdea = '';

SELECT @badIdea = @badIdea + 
           STR(Id) + N',' +
           Name + N',' + 
           Address + N'@'
    FROM SomeTable;

IF @@ROWCOUNT > 0
    SET @badIdea = SUBSTRING(@badIdea, 0, LEN(@badIdea) - 1);

SELECT @badIdea;
于 2013-05-22T09:46:40.567 回答
0

根据您的需要,您可以通过两种方式进行操作:

  1. 使用连接,例如这里的示例:http: //blog.sqlauthority.com/2010/11/25/sql-server-concat-function-in-sql-server-sql-concatenation/。这种方法简单地涉及一个查询,例如

    SELECT str(id)+','+name+','+address FROM tblName

  2. 如果您的目标是将其实际导出到文件中 - 您可以使用 SSMS 导出(我猜您正在使用它,因为您有一个 MSSQL 服务器)。右键单击查询结果(使用普通的 SELECT * FROM tblName 时),然后单击“将结果另存为...”。然后您可以将文件保存为 CSV,它将以您指定的确切格式输出文件。

于 2013-05-22T09:32:06.637 回答