Как добавить запрос в виде строки в другой запрос - PullRequest
0 голосов
/ 18 декабря 2011

Мне нужен сгенерированный запрос:

SELECT @numberOfRecords = COUNT(*) FROM Car WHERE CarId not in (Select CarId from CarData)

На данный момент у меня есть:

DECLARE @sql NVARCHAR(255)
SET @sql='Select CarId from CarData'

DECLARE @numberOfRecords BIGINT
SELECT @numberOfRecords = COUNT(*) FROM Car WHERE CarId not in (@sql)

Я пробовал другие комбинации, например, '(' орех, он не работает. Что мне нужно изменить, чтобы оно работало?

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011

Вам необходимо использовать sp_executesql

DECLARE
@numberOfRecords       INT ,
@VariableSQL NVARCHAR(255),
@SQLStmt     NVARCHAR(255),
@paramtype   NVARCHAR(100)

SET @VariableSQL = 'Select CarId from CarData'

SET @SQLStmt = 'SELECT @counter = COUNT(1) FROM Car WHERE CarId NOT IN (' + @variablesql + ')'

SET @ParamType = '@counter int output'

EXEC sp_executesql @SQLStmt, @paramtype, @Counter = @numberOfRecords OUTPUT
PRINT @numberOfRecords
2 голосов
/ 18 декабря 2011

То, что вы ищете, называется динамическим SQL, об этом написано множество статей, вам нужно использовать sp_executesql, если вы используете SQL Server

здесь есть пример здесь для чего-то похожего на то, что вы пытаетесь сделать

ваше решение должно выглядеть примерно так

DECLARE @carIdSql        NVARCHAR(255),
        @sql             NVARCHAR(MAX),
        @ParamDefinition NVARCHAR(MAX),
        @numberOfRecords BIGINT

SET @carIdSql='Select CarId from CarData';

SET @sql =
N'SELECT @numberOfRecordsOUT = COUNT(*) 
  FROM Car WHERE CarId not in (' + @carIdSql + ')'

SET @ParamDefinition = '@numberOfRecordsOUT BIGINT OUTPUT';

EXECUTE sp_executesql
  @sql,
  @ParamDefinition,
  @numberOfRecordsOUT = @numberOfRecords OUTPUT;

SELECT @numberOfRecords  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...