2017-05-05 17 views
0

私は私が30として結果を取得し、それが正しい答えですが、私は配置する必要があり、このストアドプロシージャから選択されたステートメントの変数にint値を取得する必要がありますか?

alter procedure proced 
    @tablename varchar(max) 
as 
begin 
    declare @sql as varchar(max) 
    set @sql='select max(abc) from '[email protected] 

    --print @sql 
    exec(@sql) 
end 

のようなストアドプロシージャを作成しているこの

create table exTABLE(abc int) 

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

のようなテーブルや価値観を持っていますその結果は、ストアドプロシージャ内の変数の別々のint型に30を選択し、私は出力として、それを取得する必要があり、すなわち私は私がする必要がある。この

alter procedure proced 
    @tablename varchar(max) 
as 
begin 
    declare @sql as varchar(max) 

    set @sql = 'select max(abc) from '[email protected] 

    --print @sql 
    exec(@sql) 

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

    exec(@i) 
    print @i 
end 

のように実行しようとしましたiの印刷値を30として取得します。 ANY代替方法は、またこれは、両方のプリントとが返されます

答えて

0

非常に有用であろう:

ALTER PROCEDURE proced 
@tablename VARCHAR(max) 
AS 
BEGIN 

    DECLARE @sql AS VARCHAR(max) 

    SET @sql='DECLARE @i AS INT; SELECT @i = MAX(abc) FROM '[email protected] + ';PRINT @i; SELECT @i' 

    exec(@sql) 

END 
+0

は、私が以前にも –

+0

の外に印刷@iを取得する必要があります。それは印刷:) –

+0

@navsをあなたの方法を試してみましたEXEC(@sql) –

2

がnvarchar型として@sql宣言し、代わりにsp_executesqlを使用します。入力および出力パラメータを渡して、sql文の結果をint変数に集めます。私はなぜ理解していない -

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 '[email protected] 
SET @Param = N'@i1 int OUTPUT'; 
EXEC sp_executesql @sql, @Param, @[email protected] OUTPUT; 

Print @i 
Select @i 


end 

exec proced 'exTABLE' 
関連する問題