我有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
请在这里帮助我
答案 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