2012-03-04 1 views
14

を返すストアドプロシージャを必要とします。私はそれが正しい方法であり、これを達成する最良の方法であるかどうかはわかりません。あなたがOUTPUTパラメータ、ないRETURNを使用する必要があり、発信者に単一のスカラー値を返すためには、行を挿入し、Iは最初のテーブルに新しいレコードを挿入し、この新しいレコードのIDが返され、ストアドプロシージャを記述しようとしたID

ALTER PROCEDURE dbo.spAddAsset 
(
@Name VARCHAR(500), 
@URL VARCHAR(2000) 
) 
AS 
BEGIN 
Set NOCOUNT on; 

Insert Into Assets (Name, URL) Values (@Name, @URL) 

Declare @new_identity int; 

SELECT @new_identity = SCOPE_IDENTITY() 

return @new_identity; 
END 
+0

申し訳ありませんが、2005年のために現れていません。私は残りの人に投票します。 –

答えて

27

RETURNはエラー/ステータスコード用です。また接頭辞spは重複していて不要です。

CREATE PROCEDURE dbo.AddAsset 
    @Name VARCHAR(500), 
    @URL VARCHAR(2000), 
    @new_identity INT = NULL OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT dbo.Assets(Name, URL) SELECT @Name, @URL; 
    SET @new_identity = SCOPE_IDENTITY(); 
END 
GO 

そして、それを呼び出すために:

DECLARE @new_identity INT; 
EXEC dbo.AddAsset @Name = 'a', @URL = 'b', @new_identity = @new_identity OUTPUT; 
PRINT @new_identity; 

EDITちょうどこの特定のシナリオではアスカーには影響しませんが、他のシナリオで、または将来の読者のために役立つかもしれ免責事項を追加します。 SQL Server 2008 R2およびそれ以前では、並列処理が挿入されるように結果を導き出すために使用されるようSCOPE_IDENTITYなどの組み込み関数(INSERT FROM othertableを考える)とpotentially nasty bugがあります。このバグ(here is the Connect item)はCumulative Update #5 for SQL Server 2008 R2 SP1に固定されており、これまでのところ修正は2008 R2 RTM、2008または

+0

こんにちは、私は追加した複数のレコードのセットを返すのですか(私は入力ソースとしてXMLを持っています)? – godblessstrawberry

関連する問題