UPDATE Subquery Returning Multiple Rows in SQL Server

Q

What Happens If the UPDATE Subquery Returns Multiple Rows in SQL Server?

✍: FYIcenter.com

A

If a subquery is used in a UPDATE statement, it must return exactly one row for each row in the update table that matches the WHERE clause. If it returns multiple rows, SQL Server will give you an error message. To test this out, you can try the following tutorial exercise:

-- insert two rows to fyi_rates
INSERT INTO fyi_rates VALUES (0, 'Number 1')
GO
INSERT INTO fyi_rates VALUES (0, 'Number 2')
GO

-- make sure there are 2 match rows
SELECT * FROM fyi_rates WHERE id = 0
GO
id      comment
0       Number 1
0       Number 2

-- update with subquery that returns 2 rows
UPDATE fyi_links SET notes = (
      SELECT comment FROM fyi_rates 
      WHERE fyi_rates.id = fyi_links.id
   ) 
   WHERE id = 0
GO
Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted
   when the subquery follows =, !=, <, <= , >, >= or when 
   the subquery is used as an expression.
The statement has been terminated.

It is clear that we are using subquery as an expression, and it must return 0 or 1 row. Otherwise, we will get an error.

 

Using INSERT, UPDATE and DELETE Statements in SQL Server

⇒⇒SQL Server Database Tutorials

2016-11-02, 509👍, 0💬