将多个值添加到列SQL Server

时间:2015-12-23 12:17:31

标签: sql sql-server

enter image description here

我的任务是将黑色,白色和灰色列表放在数据库中。每当有人注意到一个新单词时,都应该将其添加到数据库中。这些列表中只有很少的单词。所以我想添加一个包含几个单词的内容。

上面你可以看到我的桌子。我想查询几个单词到一个ContentID。 它应该是这样的:

 ContentID                   Words
 1                      "Password", "Login", "Configure"
 2                      ".nl", ".be", ".com"

如何查询多个值到一个ContentID?

2 个答案:

答案 0 :(得分:2)

不要这样做

您的设计存在缺陷。字段设计为仅包含一个原子数据项。试图将多个项目填充到一个字段中会限制系统的增长,并使事情变得更加困难。

如果你需要沿着这些方向做一些事情,那就像创建你的桌子一样(非常粗略的草图!):

CREATE TABLE List(ListID int, Name nvarchar(100));
CREATE TABLE Content(ContentID int, ListID int);
CREATE TABLE ContentWords(ContentID int, Word nvarchar(100), Position int);

您仍然可以通过加入两个表来阅读单个内容记录的所有单词,但现在还有许多其他内容可供您使用。如果您发现特别需要将它们作为应用程序的逗号分隔列表读取,您甚至可以使用FOR XML PATH('')技巧来执行此操作 - 请参阅http://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/了解更多信息资讯

答案 1 :(得分:1)

(续评)您可以这样做:

DECLARE @List TABLE (ID INT, ListName VARCHAR(MAX))
DECLARE @Word TABLE (ID INT, ListID INT, Word VARCHAR(MAX))

INSERT @List (ID, ListName)
VALUES  (0 , 'White'),
        (1 , 'Black')


INSERT @Word (ID, ListID, Word)
VALUES  (0, 0, 'Good'),
        (1, 0, 'Better'),
        (2, 0, 'Best'),
        (3, 1, 'Bad'),
        (4, 1, 'Worse'),
        (5, 1, 'Worstest')


SELECT      L.ID
,           L.ListName
,           STUFF(( SELECT ',' + W.Word AS [text()]
                    FROM @Word AS W
                    WHERE w.ListID = L.ID
                    FOR XML PATH('')
                        ), 1, 1, '' ) test
FROM        @List L

结果是:

ID  ListName    test
0   White   Good,Better,Best
1   Black   Bad,Worse,Worstest

非常粗略地说,但请按照以下思路思考。