SQL Server - В пункте с заявленной переменной [дубликат]

47
задан Melursus 31 May 2010 в 15:34
поделиться

4 ответа

Вам нужно выполнить это как динамический sp, например

DECLARE @ExcludedList VARCHAR(MAX)

SET @ExcludedList = '3,4,22,6014'
declare @sql nvarchar(Max)

Set @sql='SELECT * FROM [A] WHERE Id NOT IN ('+@ExcludedList+')'

exec sp_executesql @sql
39
ответ дан 26 November 2019 в 19:31
поделиться

Попробуйте следующее:

CREATE PROCEDURE MyProc @excludedlist integer_list_tbltype READONLY AS
  SELECT * FROM A WHERE ID NOT IN (@excludedlist)

А затем назовите это так:

DECLARE @ExcludedList integer_list_tbltype
INSERT @ExcludedList(n) VALUES(3, 4, 22)
exec MyProc @ExcludedList
1
ответ дан 26 November 2019 в 19:31
поделиться

Вы не можете использовать переменную в предложении IN - вам нужно использовать динамический SQL или использовать функцию (TSQL или CLR) для преобразования списка значений в таблицу .

Пример динамического SQL:

DECLARE @ExcludedList VARCHAR(MAX)
    SET @ExcludedList = 3 + ',' + 4 + ',' + '22'

DECLARE @SQL NVARCHAR(4000)
    SET @SQL = 'SELECT * FROM A WHERE Id NOT IN (@ExcludedList) '

 BEGIN

   EXEC sp_executesql @SQL '@ExcludedList VARCHAR(MAX)' @ExcludedList

 END
5
ответ дан 26 November 2019 в 19:31
поделиться

Я думаю проблема в

3 + ', ' + 4

измените его на

'3' + ', ' + '4'

DECLARE @ExcludedList VARCHAR(MAX)

SET @ExcludedList = '3' + ', ' + '4' + ' ,' + '22'

SELECT * FROM A WHERE Id NOT IN (@ExcludedList)

SET @ExcludedListe так, чтобы ваш запрос стал

либо

SELECT * FROM A WHERE Id NOT IN ('3', '4', '22')

либо

SELECT * FROM A WHERE Id NOT IN (3, 4, 22)
1
ответ дан 26 November 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: