首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将nvarchar值转换为数据类型int时,转换失败

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

Stack Overflow用户
提问于 2013-09-19 06:51:23
回答 2查看 4.3K关注 0票数 0

我想将@sql的值转换为p。但是在转换时,它说“当将nvarchar值'select sum(股) fromHard磁盘‘转换为数据类型int时,转换失败了。”

代码语言:javascript
复制
declare @tname varchar(10);
declare @p int
declare @i int

declare @sql nvarchar(max);

set @tname = 'Hard disk';

set @sql = 'select sum(stock) from' + '[' + @tname + ']'

exec  (@sql)

print @sql

select @p = convert(int,@sql)

print @p

我想要的是在整数变量@p中分配查询@SQL的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-19 06:56:36

一种方法是在动态sql中完成所有这些工作。

代码语言:javascript
复制
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)

另一种方法是创建一个输出参数。

代码语言:javascript
复制
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来用括号来修饰表名,因为它是本机的。

票数 0
EN

Stack Overflow用户

发布于 2013-09-19 07:08:39

代码语言:javascript
复制
declare @p int;
EXEC SP_EXECUTESQL N'select @p = sum(stock) from '[' + @tname + ']',N'@p int OUTPUT',@p    OUTPUT;
select @p
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18887970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档