次の形式でストアドプロシージャを作成しました。
ALTER PROCEDURE usp_data_migration
(@sourceDatabase varchar(50),
@sourceTable varchar(50),
@targetDatabase varchar(50),
@targetTable varchar(50),
@finaloutput varchar(max) output)
AS
BEGIN
----Set of SQL Blocks
END
次に、手順を実行しています:
DECLARE @finaloutput1 varchar(300)
EXEC usp_data_migration 'Yousuf', 'emp', '[City Branch]', 'emp_tgt', @finaloutput1 output
SELECT @finaloutput1
この方法で実行すると、適切な出力が得られません。
このように実行すると:
DECLARE @finaloutput1 varchar(300)
EXEC usp_data_migration @sourceDatabase = 'Yousuf',
@sourceTable = 'emp',
@targetDatabase = '[City Branch]',
@targetTable = 'emp_tgt',
@finaloutput1 output
SELECT @finaloutput1
次のようなエラーメッセージが表示されます。
メッセージ119、レベル15、状態1、行41
パラメーター番号5以降のパラメーターを '@name = value'として渡す必要があります。 「@name = value」の形式を使用した後は、後続のすべてのパラメーターを「@name = value」の形式で渡す必要があります。
また、出力パラメーターを削除してプロシージャを実行すると、目的の出力が得られますが、結果を出力として取得できません。
EXEC usp_data_migration @sourceDatabase = 'Yousuf',
@sourceTable = 'emp',
@targetDatabase = '[City Branch]',
@targetTable = 'emp_tgt'
私は何をすべきか?
前もって感謝します。
このように選択する必要があります
例1
create procedure p1
(
@id INT,
@name varchar(20) OUTPUT,
@company varchar(20) OUTPUT
)
AS
BEGIN
Set @name = 'name'
Set @company = 'company'
select @name , @company from table1 where id = @id;
END
GO
例2
CREATE PROCEDURE Myproc
@parm varchar(10),
@parm1OUT varchar(30) OUTPUT,
@parm2OUT varchar(30) OUTPUT
AS
SELECT @parm1OUT='parm 1' + @parm
SELECT @parm2OUT='parm 2' + @parm
GO
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @parmIN VARCHAR(10)
DECLARE @parmRET1 VARCHAR(30)
DECLARE @parmRET2 VARCHAR(30)
SET @parmIN=' returned'
SET @SQLString=N'EXEC Myproc @parm,
@parm1OUT OUTPUT, @parm2OUT OUTPUT'
SET @ParmDefinition=N'@parm varchar(10),
@parm1OUT varchar(30) OUTPUT,
@parm2OUT varchar(30) OUTPUT'
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@parm=@parmIN,
@parm1OUT=@parmRET1 OUTPUT,@parm2OUT=@parmRET2 OUTPUT
SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2"
go
drop procedure Myproc
エラーメッセージは一目瞭然です-すべてのパラメーターに名前を付けてください。
DECLARE @finaloutput1 varchar(300);
EXEC dbo.usp_data_migration -- always use schema prefix
@sourceDatabase = 'Yousuf',
@sourceTable = 'emp',
@targetDatabase = '[City Branch]',
@targetTable = 'emp_tgt',
@finaloutput = @finaloutput1 OUTPUT;
SELECT @finaloutput1;
簡単な例:
create procedure proc2 @var int out,@var2 varchar(10) out
as
begin
set @var=(select max(id) from customer);
set @var2=(select name from customer where id=@var);
end
declare @maxid int;
declare @maxname varchar(10);
exec proc2 @maxid out,@maxname out;
select @maxid,@maxname;