Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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存储过程_Sql_Sql Server - Fatal编程技术网

选择逗号分隔值sql存储过程

选择逗号分隔值sql存储过程,sql,sql-server,Sql,Sql Server,我有三张桌子: 书架->pkid和其他列 book\u author->pkid,fkid\u book\u shelf,fkid\u author 作者->pkid,姓名等 对于中book\u shelf中的一行,希望以逗号分隔的形式获取作者姓名。如果书架实体有两个作者,则在book\u author表中插入两行 这是我试过的 (select BookShelf.pkid as SrNo,stuff((select ',' + a.name from lib.book_she

我有三张桌子:

  • 书架
    ->
    pkid
    和其他列

  • book\u author
    ->
    pkid
    fkid\u book\u shelf
    fkid\u author

  • 作者
    ->
    pkid
    姓名

  • 对于中
    book\u shelf
    中的一行,希望以逗号分隔的形式获取作者姓名。如果书架实体有两个作者,则在
    book\u author
    表中插入两行

    这是我试过的

    (select BookShelf.pkid as SrNo,stuff((select ',' + a.name
        from 
        lib.book_shelf bs inner join
        lib.book_author ba on bs.pkid=ba.fkid_book_shelf
        inner join lib.author a on a.pkid=ba.fkid_authors 
        for xml path ('')
    ), 1, 1, '') as Author from lib.book_shelf BookShelf)
    

    但是它会为每个
    书架
    行选择所有作者姓名。

    希望这对您有所帮助

    CREATE TABLE BookShelf(ID INT)
    CREATE TABLE BookAuthor(ID INT, BookShelf INT, AuthorID INT)
    CREATE TABLE Author(ID INT, Name VarChar(50))
    GO
    
    INSERT INTO BookShelf VALUES(1)
    INSERT INTO BookShelf VALUES(2)
    
    INSERT INTO Author VALUES(1,'Author1')
    INSERT INTO Author VALUES(2,'Author2')
    INSERT INTO Author VALUES(3,'Author3')
    INSERT INTO Author VALUES(4,'Author4')
    
    
    INSERT INTO BookAuthor VALUES(1,1,1)
    INSERT INTO BookAuthor VALUES(1,1,2)
    INSERT INTO BookAuthor VALUES(1,2,3)
    INSERT INTO BookAuthor VALUES(1,2,4)
    
    SELECT 
        BookShelf.ID, 
        STUFF((SELECT ',' + Author.Name FROM BookAuthor INNER JOIN Author ON BookAuthor.AuthorID = Author.ID WHERE BookAuthor.BookShelf = BookShelf.ID FOR XML PATH('')),1,1,'')
    FROM 
        BookShelf 
    

    如果书架上有一个authorth,则需要一个“,”(逗号)。XML的
    位不太正确。请尝试对XML路径(“”)、1、1、“”)执行
    。已更新该语句。。现在验证。帮助很大,非常感谢