我有一张像这样的桌子和价值
create table exTABLE(abc int)
insert into exTABLE(abc) values(10)
insert into exTABLE(abc) values(20)
insert into exTABLE(abc) values(30)
我已经创建了这样一个存储过程
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变量中,我需要得到它作为输出,也就是说,我尝试这样做
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的印刷价值。任何替代方法都是非常有用的。
发布于 2017-05-05 03:21:13
将@sql声明为nvarchar并使用sp_executesql。传递输入和输出参数,从int变量中的sql语句中收集结果。
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'
发布于 2017-05-05 03:03:27
这将同时打印和返回:
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
https://stackoverflow.com/questions/43803199
复制相似问题