Установить переменную из таблицы - PullRequest
5 голосов
/ 26 июня 2009

Если я хочу установить переменную для поля в таблице, я обычно использую что-то вроде

SELECT @UserIdToUpdate = userId FROM #NewUsers

В этом случае будет несколько результатов, и я просто хочу первый, поэтому я попробовал это, но он не работает и говорит неверный синтаксис top

SELECT @UserIdToUpdate = TOP 1 UserId FROM #NewUsers

Если это так, могу ли я использовать первый пример без верха? Я полагаю, он просто возьмет первую запись? Я знаю, что это кажется странным, но команда находится в цикле, поэтому она будет выбирать запись, что-то делать с ней, удалять ее, а затем выбирать следующую.

Ответы [ 5 ]

14 голосов
/ 26 июня 2009
SELECT @UserIdToUpdate = NULL
SELECT TOP 1 @UserIdToUpdate = userId FROM #NewUsers

Первый оператор необходим, потому что если второй найдет ноль строк, то переменная вообще не будет присвоена и сохранит свое прежнее значение.

С другой стороны,

SELECT @UserIdToUpdate = (SELECT TOP 1 userId FROM #NewUsers)

это будет работать, даже если найдены нулевые строки.

0 голосов
/ 16 октября 2018

Мы также можем использовать оператор SET:

DECLARE @UserIdToUpdate int;  
SET @UserIdToUpdate = (SELECT TOP 1 userId FROM #NewUsers);

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-local-variable-transact-sql?view=sql-server-2017

0 голосов
/ 26 июня 2009
SELECT TOP 1 @UserIdToUpdate = UserId FROM #NewUsers
0 голосов
/ 26 июня 2009
SELECT @UserIdToUpdate = (SELECT TOP 1 UserId FROM #NewUsers)

Но я считаю, что ваш первый запрос также будет работать, если вы затем удалите эту строку. И SQL Server не должен читать все строки, а на самом деле должен выбирать только первую (в произвольном порядке)

0 голосов
/ 26 июня 2009

Это должно работать

SELECT @UserIdToUpdate = userId FROM #NewUsers LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...