Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ich brauche einen SP, um meine Tabellen auszuwählen oder zu aktualisieren, und dafür muss ich mehrere Werte für eine einzelne Variable eingeben. Wie kann ich das tun?

Haben Sie darüber nachgedacht, Tabellenvariablen zu verwenden, um Daten an eine gespeicherte Prozedur zu übergeben? Beispiel:

Einrichtung

CREATE TYPE EmpIdValuesType AS TABLE
  (                     
        [EmpID] [int]NOT NULL
  )

CREATE TABLE Employee
(
  EmpID INT,
  Name varchar(20)
 )

INSERT INTO Employee 
Values
 (1, 'test1'),
 (2, 'test2'),
 (3, 'test3'),
 (4, 'test4'),
 (5, 'test5'),
 (6, 'test6'),
 (7, 'test7');

Create Procedure usp_GetEmployees
(
  @TableVariable EmpIdValuesType READONLY
)
AS
  SELECT *
  FROM Employee
  INNER JOIN @TableVAriable TV
    ON Employee.EmpId = TV.EmpId

Jetzt können Sie Zeilen in eine temporäre Tabellenvariable vom Typ EmpIdValuesType einfügen und die Variable an die gespeicherte Prozedur übergeben:

Aufruf der gespeicherten Prozedur

DECLARE @empIds AS EmpIdValuesType

INSERT INTO @empIds(EmpID) Values (1), (2), (5)

Exec usp_GetEmployees @empIds;

Und hier sind die Ergebnisse:

SQLFiddle