4つの数値を受け取り、それらをテーブルに挿入するストアドプロシージャを作成する必要があります。これは私がこれまでに開発したものです:
Declare
@1 Int = 10,
@2 Int = 20,
@3 Int = 30,
@4 Int = 40
Create table #Temp(Num int)
Declare @I char(1) = 1
While (@I <= 4)
Begin
Insert Into #Temp
Select @I
SET @I +=1
end
Select * from #Temp
Drop table #Temp
入力を直接静的にテーブルに挿入できることはわかっていますが、それを行うためのより良い方法があるかどうかを知りたいだけです。 while
ステートメントを使用したかったのですが、問題は(I)変数の数値がテーブルに挿入されていることです!!つまり、出力は1、2、3、4です。私が欲しいのは10、20、30、40です。
また、ストアドプロシージャでテーブル値パラメータータイプを使用して、このtvpを通じて数値を渡すこともできます
タイプを作成します
CREATE TYPE GetNumbers AS TABLE
( Numbers INT );
GO
プロシージャを作成します
CREATE PROCEDURE dbo.InsertNumbers
@GetNumbers GetNumbers READONLY
AS
SET NOCOUNT ON;
CREATE TABLE #Temp(Num int);
INSERT INTO #Temp(Num)
SELECT Numbers
FROM @GetNumbers;
SELECT * FROM #Temp;
DROP TABLE #Temp;
GO
一時テーブルへの挿入はここでは実際には必要ありません。質問と同じに保つためにのみ行われます。
変数をデータで満たし、プロシージャを呼び出します
/* Declare a variable that references the type. */
DECLARE @GetNumbers AS GetNumbers;
/* Add data to the table variable. */
INSERT INTO @GetNumbers (Numbers)
VALUES(10),(20),(30),(40);
/* Pass the table variable data to a stored procedure. */
EXEC InsertNumbers @GetNumbers;
Tvpの here で使用されている例など
Declare
@1 Int = 10,
@2 Int = 20,
@3 Int = 30,
@4 Int = 40
Create table #Temp(Num int)
--1st way
INSERT #Temp(Num)
SELECT @1
UNION ALL
SELECT @2
UNION ALL
SELECT @3
UNION ALL
SELECT @4
SELECT * FROM #Temp
TRUNCATE TABLE #Temp
--2nd way
INSERT #Temp(Num)
VALUES
(@1),
(@2),
(@3),
(@4)
SELECT * FROM #Temp
DROP TABLE #Temp
CREATE PROCEDURE dbo.InsertFourValues (@I1 int, @I2 int, @I3 int, @I4 int)
AS
BEGIN
--the table below must already exist
INSERT INTO dbo.MyTable (MyIntColumn)
VALUES (@I1), (@I2), (@I3), (@I4);
END
今、あなたはあなたの値を使ってそれを呼び出すだけです:
EXEC dbo.InsertFourValues (10, 20, 30, 40);
最善の策は、静的なInsertステートメントでそれを実行することです。ループを介して本当に実行したい場合は、@ Iの値を使用して、caseステートメントを使用してinsertステートメントに渡す値を決定し、それ
I.E.
While (@I <= 4)
Begin
Insert Into #Temp
Select case @I when 1 then @1
when 2 then @2
-- etc
End
SET @I +=1
end