我有这个查询(这是我查询的一个部分)
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 :(得分:2)
这不是正确的做法。而不是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 )