首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server 2008 (SP4)子查询返回的值超过一个

问Server 2008 (SP4)子查询返回的值超过一个
EN

Stack Overflow用户
提问于 2018-01-15 12:15:04
回答 1查看 52关注 0票数 0

关于server 2008 (SP4)的此查询直到昨天上午才正确运行。

今天我又犯了一个难以理解的错误。

我需要替换Server表中的值';' to '-' of列RisInt和RisNot。

我尝试过使用SQL语法UPDATE忽略,但没有成功。

Err 42000 - SQL ServerIncorrect语法

如何解决这个问题?

你能帮帮我吗?

提前感谢您的帮助,真的很感激。

下面的SQL代码。

代码语言:javascript
复制
UPDATE [DBO].[Details]
SET RisInt = REPLACE(RisInt, ';', '-'),
 RisNot = REPLACE(RisNot, ';', '-')

[Err] 21000 - [SQL Server]Subquery returned more than 1 value. 
This is not permitted when the subquery follows =, !=, <, <= , >, >= or
when the subquery is used as an expression.
01000 - [SQL Server]The statement has been terminated.

#编辑01

代码语言:javascript
复制
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DECLARE @IGI VARCHAR(20)

SELECT @IGI = (SELECT a.IGXF FROM DBO.Details a, DELETED i
WHERE a.IGXF = i.IGXF)
    DELETE FROM DBO.SUPPORT where IGBA = @IGI

    -- Insert statements for trigger here

END
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 12:51:20

选择@IGI =(从a.IGXF a中选择DBO.Details,在其中删除a.IGXF = i.IGXF) 从DBO.SUPPORT中删除IGBA = @IGI

编写触发器时所犯的一个常见错误是假定单个行受到影响。当返回多行时,上面的标量子查询将失败。

下面是一个未经测试的示例,说明如何重构触发器代码以处理多个行。这也使用ANSI-92 SQL样式联接,而不是旧的语法。

代码语言:javascript
复制
SET NOCOUNT ON;
DELETE FROM dbo.SUPPORT
WHERE IGBA IN(
    SELECT a.IGXF
    FROM dbo..Details AS a
    JOIN DELETED  AS i ON
        a.IGXF = i.IGXF
    );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48262850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档