Sql server 2008 如何在sql server中获取表记录并存储在变量中,以及提取每条记录

Sql server 2008 如何在sql server中获取表记录并存储在变量中,以及提取每条记录,sql-server-2008,Sql Server 2008,我有三张桌子 类别(类别ID、类别名称、父项、类别标签) 新闻类别(ID、新闻ID、类别) 新闻(新闻ID、标题、文章、新闻标签) 我想从类别表中获取所有类别标记,其中News\u ID=72。我正在sql server中使用以下查询: DECLARE @cat varchar(100) SET @cat=(select Category_Tag from Category where Category_ID in( selec

我有三张桌子 类别(类别ID、类别名称、父项、类别标签) 新闻类别(ID、新闻ID、类别) 新闻(新闻ID、标题、文章、新闻标签)

我想从类别表中获取所有类别标记,其中News\u ID=72。我正在sql server中使用以下查询:

DECLARE @cat varchar(100)
SET @cat=(select Category_Tag
          from Category
          where Category_ID in(
              select Category 
              from News_Category
              inner join Category on Category.Category_ID = News_Category.Category
              where News_ID=72
              )
          )
但此查询不适用于我,它将错误显示为:-子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时。 。我还想从上面的查询中提取每条记录,以更新新闻表列News_Tags。假设新闻表中的News_Tags列包含值“Tejpal”,上面的查询返回两个值-National和international。然后,最终的值应该存储在新闻表的News_Tags列中,作为Tejpal、National、International


请帮我这里的忙

这里的错误描述得很清楚。您已经声明了一个标量变量,该变量设计用于保存单个值,并且您正在尝试将多行插入该变量中

您需要做两件事中的一件,或者使用临时表,例如

DECLARE @Cat TABLE (CategoryTag VARCHAR(1000));

INSERT INTO @Car
SELECT C.Category_Tag
FROM Category C
INNER JOIN News_Category N ON N.Category = C.CategoryID
WHERE N.News_ID = 72
也可以将这些值连接为单个字符串

我想在这种情况下,你可能在寻找第二个选项,看起来像这样。这段代码主要是psuedo从我的另一个脚本中获取的,但它应该会让您走上正确的轨道

DECLARE @CategoryTags VARCHAR(1000);

SET @CategoryTags = (
  SELECT STUFF((
    SELECT ISNULL(Category_Tag, 'NullTag')
    FROM Category C
    INNER JOIN News_Category N ON N.Category = C.CategoryID
    WHERE N.News_ID = N1.NewsID
    FOR XML PATH (''),TYPE).value('(./text())[1]','VARCHAR (MAX)')
    ,1,0,'') [Categories]
  FROM News_Category N1
  WHERE N1.News_ID = 72

UPDATE News_Category
  SET NewTags = NewTags + @CategoryTags
WHERE News_ID = 72

这里的错误是相当描述性的。您已经声明了一个标量变量,该变量设计用于保存单个值,并且您正在尝试将多行插入该变量中

您需要做两件事中的一件,或者使用临时表,例如

DECLARE @Cat TABLE (CategoryTag VARCHAR(1000));

INSERT INTO @Car
SELECT C.Category_Tag
FROM Category C
INNER JOIN News_Category N ON N.Category = C.CategoryID
WHERE N.News_ID = 72
也可以将这些值连接为单个字符串

我想在这种情况下,你可能在寻找第二个选项,看起来像这样。这段代码主要是psuedo从我的另一个脚本中获取的,但它应该会让您走上正确的轨道

DECLARE @CategoryTags VARCHAR(1000);

SET @CategoryTags = (
  SELECT STUFF((
    SELECT ISNULL(Category_Tag, 'NullTag')
    FROM Category C
    INNER JOIN News_Category N ON N.Category = C.CategoryID
    WHERE N.News_ID = N1.NewsID
    FOR XML PATH (''),TYPE).value('(./text())[1]','VARCHAR (MAX)')
    ,1,0,'') [Categories]
  FROM News_Category N1
  WHERE N1.News_ID = 72

UPDATE News_Category
  SET NewTags = NewTags + @CategoryTags
WHERE News_ID = 72
这可能对你有帮助

DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + CHAR(13) + CHAR(10), '') + ISNULL(Category_Tag, 'NullTag')
FROM Category
select @combinedString
这可能对你有帮助

DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + CHAR(13) + CHAR(10), '') + ISNULL(Category_Tag, 'NullTag')
FROM Category
select @combinedString

您希望将每条记录提取到什么中?要做什么?在获取所有记录后,我想提取每个记录,用每个记录更新另一个表值。假设在另一个表中存储了“Modi”,并且上面的查询返回两个Category_标记为National和International,则另一个表的最终值应为Modi,National,国际。请帮助我。您可以使用“选择到”将找到的结果复制到另一个表中。当你说“这个查询对我不起作用”时,你是什么意思?错误消息?未返回预期结果?您可能需要编辑问题以添加更多信息/示例数据您希望将每条记录提取到什么中?要做什么?在获取所有记录后,我想提取每个记录,用每个记录更新另一个表值。假设在另一个表中存储了“Modi”,并且上面的查询返回两个Category_标记为National和International,则另一个表的最终值应为Modi,National,国际。请帮助我。您可以使用“选择到”将找到的结果复制到另一个表中。当你说“这个查询对我不起作用”时,你是什么意思?错误消息?未返回预期结果?您可能希望编辑问题以添加更多信息/示例数据您的上述查询正在获取适当的记录,但如何获取每条记录。并且您的以下查询在任何情况下都返回NULL。请在此帮助我。如果只返回一个CategoryTag,您的查询就可以了。但是,如果表category的一个category_ID在News_category表中出现了两次或两次以上,则应返回两个category_标记。在这种情况下,您返回的错误为:--子查询返回的值超过1价值当子查询在=、!=、=或者当子查询用作表达式时。上面的查询正在获取适当的记录,但如何获取每条记录。并且您的以下查询在任何情况下都返回NULL。请在此帮助我。如果只返回一个CategoryTag,您的查询就可以了。但是,如果表category的一个category_ID在News_category表中出现了两次或两次以上,则应返回两个category_标记。在这种情况下,您返回的错误为:--子查询返回的值超过1价值当子查询在=、!=、=或者当子查询用作表达式时。