2010-10-01 63 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