2011-12-17 150 views
0

我需要有一個生成的查詢:如何爲字符串添加查詢到另一個查詢

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) 

我嘗試其他不同的組合,像'('螺母它不起作用。 我需要改變它的工作方式嗎?

+0

我在回答中添加了更多詳細信息,希望這有助於 – 2011-12-17 21:31:04

回答

2

你所尋找被稱爲動態SQL,有關於它的許多文章,你將需要使用sp_executesql的,如果你正在使用SQL Server

有類似你是什麼東西的例子here嘗試做

您的解決方案應該是這個樣子

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 
+0

很好,非常感謝! – user278618 2011-12-17 21:32:51

2

您需要使用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 
+0

請解釋downvote嗎? – 2011-12-17 21:18:17

+0

你完全錯過了他們想要做的事情(插入一個動態的'不在'子查詢中)他們需要動態SQL。 – 2011-12-17 21:19:09

+0

我想讓你知道,那不是我 – user278618 2011-12-17 21:19:56