保存查询字符串结果变量在SQL Server

问题描述:

我有这个疑问(这是我的查询的一个切片)保存查询字符串结果变量在SQL Server

DECLARE @Count varchar(max) 

SET @Count = ('SELECT TOP 1 COUNT(Id) FROM ' + QUOTENAME(@Tbl)) 

EXEC (@Count) 

DECLARE @CalRemainPage int = convert(int, @Count) - (3 * 15) 

,当我跑我的查询我从这片得到这个错误

当将varchar值'SELECT TOP 1 COUNT(Id)FROM [Sample_Work]'转换为数据类型int时,转换失败。

我知道我的问题是@count结果,把@count字符串,而不是这个

DECLARE @CalRemainPage int = convert(int, @Count) - (3 * 15) 

结果如何节省@count查询的结果,并且在其他地方使用@count如顶样本?

谢谢

+0

TOP1计回报INT所以你有这样的错误 – SK2185 2014-11-23 06:01:49

这不是正确的做法。而不是Exec使用SP_executesql来执行您的动态SQL。

SP_executesql中,您可以声明变量为OUTPUT parameter,您可以在动态查询之外使用它。尝试这样的事情。

DECLARE @Count INT, 
     @Tbl VARCHAR(20)='jointest', 
     @sql NVARCHAR(max) 

SET @sql = ('SELECT TOP 1 @Count= COUNT(ID) FROM '+ Quotename(@Tbl)) 

EXEC Sp_executesql 
    @sql, 
    N'@Count int output', 
    @count output 

DECLARE @CalRemainPage INT= @Count - (3 * 15) 
+0

感谢你的帮助,但我想试试这 DECLARE CalRemainPage INT = SQL - (3 * 15) 当我改变计数为sql我得到同样的错误 – 2014-11-23 07:12:13

+0

@ SH.Developer你不应该那样做。计数已经出现在@计数变量,那么为什么你想'@ sql'那里 – 2014-11-23 07:14:06

+0

我想从(3 * 15)Id的减法计数从Id获得从sql – 2014-11-23 07:19:55