如何获取表记录并在sql server中存储变量并提取每条记录

时间:2013-12-06 13:30:08

标签: sql-server-2008

我有3张桌子 类别(CATEGORY_ID,CATEGORY_NAME,家长,的category_tag) News_Category(ID,News_ID,类别) 新闻(News_ID,标题,条,News_Tags)

我想从类别表中获取所有Category_Tag,其中News_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
              )
          )

但是这个查询对我不起作用它显示错误: - 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 。我还要从上面的查询中提取每个单个记录以更新新闻表列News_Tags.Suppose News表中的News_Tags列包含值“Tejpal”和上面的查询返回两个值 - National和Interbational。然后最终值应存储在News_Tags新闻表栏中,作为Tejpal,National,International

请在这里帮助我

2 个答案:

答案 0 :(得分:0)

此处的错误非常具有描述性。您已声明一个标量变量,该变量旨在保存单个值,并且您尝试在该变量中插入多行。

你需要做两件事之一,要么使用临时表,如

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

或者您可以将值连接为单个字符串。

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

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

答案 1 :(得分:0)

这可能会对您有所帮助。

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