2010-10-01 91 views
83

變量執行動態SQL如下的存儲過程:獲取動態SQL的結果轉化爲SQL服務器

DECLARE @sqlCommand nvarchar(1000) 
DECLARE @city varchar(75) 
SET @city = 'London' 
SET @sqlCommand = 'SELECT COUNT(*) FROM customers WHERE City = @city' 
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city 

如何使用COUNT(*)列值返回值的SP?

回答

136
DECLARE @sqlCommand nvarchar(1000) 
DECLARE @city varchar(75) 
declare @counts int 
SET @city = 'New York' 
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city' 
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75),@cnt int OUTPUT', @city = @city, @[email protected] OUTPUT 
select @counts as Counts 
+2

+1:你擊敗了我,需要聲明一個變量,並將其標記爲OUTPUT。 [欲瞭解更多信息,推薦閱讀SQL Server動態SQL,請參閱動態SQL的詛咒和祝福](http://www.sommarskog.se/dynamic_sql.html#sp_executesql) – 2010-10-01 15:46:34

+1

謝謝。 N'@ city nvarchar(75),@ cnt int OUTPUT'中的OUTPUT關鍵字就是我所缺少的。 – 2010-10-01 17:28:51

+0

是否沒有解決方案不需要向動態語句添加輸出變量? – 2016-12-20 16:18:04

2

你可能試過這個,但是你的規格是這樣的,你可以做到這一點?

DECLARE @city varchar(75) 
DECLARE @count INT 
SET @city = 'London' 
SELECT @count = COUNT(*) FROM customers WHERE City = @city 
+2

或者:SELECT @count = COUNT(*)FROM客戶WHERE市= @city – Sage 2010-10-01 15:45:21

+0

賢者的評論實際上是首選格式。 – 2010-10-01 15:47:22

+0

@Sage,@OMG小馬:好電話。這是在網絡上的文本框中非常不同的編程。 :) – Brad 2010-10-01 15:49:25

0
DECLARE @sqlCommand nvarchar(1000) 
DECLARE @city varchar(75) 
DECLARE @cnt int 
SET @city = 'London' 
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city' 
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city 
RETURN @cnt 
+1

我認爲你的答案被切斷了。 – Sage 2010-10-01 15:44:40

-1
vMYQUERY := 'SELECT COUNT(*) FROM ALL_OBJECTS WHERE OWNER = UPPER(''MFI_IDBI2LIVE'') AND OBJECT_TYPE = ''TABLE'' 
    AND OBJECT_NAME =''' || vTBL_CLIENT_MASTER || ''''; 
    PRINT_STRING(VMYQUERY); 
    EXECUTE IMMEDIATE vMYQUERY INTO VCOUNTTEMP ; 
+0

這不適用於sql服務器。 – 2015-05-23 11:06:47

0

動力版本

ALTER PROCEDURE [dbo].[ReseedTableIdentityCol](@p_table varchar(max))-- RETURNS int 
    AS 
    BEGIN 
     -- Declare the return variable here 
     DECLARE @sqlCommand nvarchar(1000) 
     DECLARE @maxVal INT 
     set @sqlCommand = 'SELECT @maxVal = ISNULL(max(ID),0)+1 from '[email protected]_table 
     EXECUTE sp_executesql @sqlCommand, N'@maxVal int OUTPUT',@[email protected] OUTPUT 
     DBCC CHECKIDENT(@p_table, RESEED, @maxVal) 
    END 


exec dbo.ReseedTableIdentityCol @p_table='Junk' 
0

這可能是一個解決方案嗎?

declare @step2cmd nvarchar(200) 
DECLARE @rcount NUMERIC(18,0) 
set @step2cmd = 'select count(*) from uat.ap.ztscm_protocollo' --+ @nometab 
EXECUTE @rcount=sp_executesql @step2cmd 
select @rcount