it-swarm.com.de

Schreiben einer gespeicherten T-SQL-Prozedur, um 4 Zahlen zu empfangen und in eine Tabelle einzufügen

Ich muss eine gespeicherte Prozedur schreiben, um 4 Zahlen zu empfangen und sie in eine Tabelle einzufügen. Folgendes habe ich bisher entwickelt:

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

Ich weiß, dass ich die Eingaben direkt und statisch in die Tabelle einfügen kann, aber ich möchte nur wissen, ob es einen besseren Weg gibt, dies zu tun. Ich wollte eine while Anweisung verwenden, aber das Problem ist, dass die Zahlen für (I) Variable in die Tabelle eingefügt werden !! Ich meine, die Ausgabe ist 1,2,3,4; Was ich will, ist 10,20,30,40.

5
Pantea Tourang

Sie können in der gespeicherten Prozedur auch einen Parametertyp mit Tabellenwert verwenden und Zahlen über diesen Fernseher übertragen.

Erstellen Sie den Typ

CREATE TYPE GetNumbers AS TABLE   
( Numbers INT );  
GO  

Erstellen Sie die Prozedur

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  

Das Einfügen in eine temporäre Tabelle ist hier nicht wirklich erforderlich, nur um die Frage gleich zu halten.

Füllen Sie eine Variable mit Daten und rufen Sie die Prozedur auf

/* 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;  

Das verwendete Beispiel und mehr auf tvp's hier

11
Randi Vertongen
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
7
Denis Rubashkin
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

Jetzt nennen Sie es einfach mit Ihren Werten:

EXEC dbo.InsertFourValues (10, 20, 30, 40);
5
Queue Mann

Am besten tun Sie dies mit einer statischen Insert-Anweisung. Wenn Sie dies wirklich über eine Schleife tun möchten, können Sie den Wert von @I verwenden, um zu bestimmen, welcher Wert mithilfe einer case-Anweisung an die insert-Anweisung übergeben werden soll Das

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
2
saihtam8