将字符串查询结果保存在sql server中的变量中

时间:2014-11-23 05:59:31

标签: sql-server stored-procedures

我有这个查询(这是我查询的一个部分)

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,例如顶级样本?

谢谢

1 个答案:

答案 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 )