首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要在从存储过程中选择语句的变量中获得int值吗?

我需要在从存储过程中选择语句的变量中获得int值吗?
EN

Stack Overflow用户
提问于 2017-05-05 10:57:28
回答 2查看 86关注 0票数 0

我有一张像这样的桌子和价值

代码语言:javascript
复制
create table exTABLE(abc int)

insert into exTABLE(abc) values(10)
insert into exTABLE(abc) values(20)
insert into exTABLE(abc) values(30)

我已经创建了这样一个存储过程

代码语言:javascript
复制
alter procedure proced
    @tablename varchar(max)
as
begin
    declare @sql as varchar(max)
    set @sql='select max(abc) from '+@tablename

    --print @sql
    exec(@sql)
end

我将得到结果为30,这是正确的答案,但我需要将所选的结果30放在存储过程中的一个独立的int变量中,我需要得到它作为输出,也就是说,我尝试这样做

代码语言:javascript
复制
alter procedure proced
    @tablename varchar(max)
as
begin
    declare @sql as varchar(max)

    set @sql = 'select max(abc) from '+@tablename

    --print @sql
    exec(@sql)

    declare @i as int
    set @i = cast(@sql as int)

    exec(@i)
    print @i
end

我需要得到我30的印刷价值。任何替代方法都是非常有用的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-05 11:21:13

将@sql声明为nvarchar并使用sp_executesql。传递输入和输出参数,从int变量中的sql语句中收集结果。

代码语言:javascript
复制
 Alter procedure proced
 @tablename varchar(max)
 as
 begin

declare @sql as nvarchar(max),@i int
, @Param nvarchar(500);
set @sql='select @i1=max(abc) from '+@tablename
SET @Param = N'@i1 int OUTPUT';
EXEC sp_executesql @sql, @Param, @i1=@i OUTPUT;

Print @i
Select @i


end

exec proced 'exTABLE'
票数 2
EN

Stack Overflow用户

发布于 2017-05-05 11:03:27

这将同时打印和返回:

代码语言:javascript
复制
ALTER PROCEDURE proced
 @tablename VARCHAR(max)
 AS
 BEGIN

  DECLARE @sql AS VARCHAR(max)

  SET @sql='DECLARE @i AS INT; SELECT @i = MAX(abc) FROM '+@tablename + ';PRINT @i; SELECT @i'

  exec(@sql)

END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43803199

复制
相关文章

相似问题

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