Sql 将nvarchar值转换为数据类型int时转换失败

Sql 将nvarchar值转换为数据类型int时转换失败,sql,int,dynamic-sql,typeconverter,nvarchar,Sql,Int,Dynamic Sql,Typeconverter,Nvarchar,我想得到@sql到p的值。 但在转换过程中,它表示“将nvarchar值‘select sum(stock)from[Hard disk]”转换为int数据类型时,转换失败。” 我想要的是在整型变量@p..中分配查询@SQL的结果,一种方法是在动态SQL中完成所有操作 declare @tname varchar(10); declare @p int declare @i int declare @sql nvarchar(max); set @tname = 'Hard disk';

我想得到@sql到p的值。 但在转换过程中,它表示“将nvarchar值‘select sum(stock)from[Hard disk]”转换为int数据类型时,转换失败。”


我想要的是在整型变量@p..

中分配查询@SQL的结果,一种方法是在动态SQL中完成所有操作

declare @tname varchar(10);
declare @p int
declare @i int

declare @sql nvarchar(max);

set @tname = 'Hard disk';

set @sql = 
'DECLARE @Result AS INT
select @Result = sum(stock) from' + '[' + @tname + ']
PRINT @Result'

exec  (@sql)
另一种方法是创建一个输出参数

DECLARE @tname VARCHAR(50)
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @Result INT

SET @tname = 'Hard disk';
SET @SQLString = N'SELECT @Result = sum(stock)
                   FROM ' + QUOTENAME( @tname )  
SET @ParmDefinition = N'@Result INT OUTPUT'
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@Result=@Result OUTPUT

PRINT @Result

最好使用QUOTENAME将表名与括号括在一起,因为它更自然。

可能与第一个重复,因为我需要对得到的值执行一些整数运算。但是第二个看起来很酷。如果您也能简单地向我解释一下第二个问题,那就太好了。这是使用返回一个或多个值的动态sql的标准方法。在ParamDefinition中,可以定义更多的变量输入或输出,并用逗号分隔。对于输入变量,不必将其标记为输入。您可以在中查看更多详细信息
declare @p int;
EXEC SP_EXECUTESQL N'select @p = sum(stock) from '[' + @tname + ']',N'@p int OUTPUT',@p    OUTPUT;
select @p
declare @p int;
EXEC SP_EXECUTESQL N'select @p = sum(stock) from '[' + @tname + ']',N'@p int OUTPUT',@p    OUTPUT;
select @p