Проблема с переменными T_SQL - PullRequest
       0

Проблема с переменными T_SQL

1 голос
/ 13 декабря 2010

У меня есть переменная в одном из моих SP.У меня есть что-то вроде этого в моем SP:

Declare @Statusid int

SELECT @Statusid = ID 
FROM table1 a, table2 b
WHERE a.col1 = b.col1

Но SQL возвращает только одно значение, хотя оно имеет несколько значений.

Когда я выполняю следующую команду SQL Stmt, я получаю несколькоID

SELECT ID 
FROM table1 a, table2 b
WHERE a.col1 = b.col1

Как получить несколько значений с помощью переменной.

Ответы [ 4 ]

5 голосов
/ 13 декабря 2010

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

DECLARE @Status TABLE (Status int)

INSERT @Status
SELECT ID 
FROM table1 a JOIN table2 b ON a.col1 = b.col1

. И используйте правильное JOIN в соответствии со стандартом ANSI-92, опубликованным в 1992

1 голос
/ 13 декабря 2010

Переменная @Statusid может иметь только одно значение. Вероятно, хранится последнее самое последнее значение. Чтобы увидеть это немного лучше, попробуйте следующее

DECLARE @Statuses varchar(max)

SELECT  @Statuses = @Statuses + cast(ID as varchar) + ", "
FROM table1 a
     INNER JOIN table2 b
     ON a.col1 = b.col1

Print @Statuses 

По этому вопросу

Как получить несколько значений с помощью переменной.

Для чего вы планируете переменную?

1 голос
/ 13 декабря 2010

Вы не можете - переменная может содержать только одно значение, если только она не является табличной переменной.Что вы делаете с переменной?Почему бы просто не присоединиться к таблицам?

(Кроме того, пожалуйста, никогда не используйте этот подразумеваемый синтаксис соединения снова, это очень плохая практика программирования, которая приводит к ошибкам и ее труднее поддерживать.)

0 голосов
/ 13 декабря 2010

Вы можете назначить только одно значение переменной, почему бы не использовать временную таблицу?

CREATE TABLE #TEMPTABLE (
StatusID  INT )

INSERT INTO #TEMPTABLE(StatusID) SELECT ID FROM table1 a, table2 b WHERE a.col1 = b.col1
-- USE THE TABLE AND THEN REMEMBER TO DELETE IT
DROP TABLE #TEMPTABLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...