0

変数のように単一の変数の複数の値を渡すために必死にspが必要であり、@list私がそれに入れている値は' 1,3,4,5,66'であり、これらのIDに実現されるテーブルからの情報が必要です。

SELECT T.C.value('.', 'NVARCHAR(100)') AS [id]
    INTO #tblPersons
    FROM (SELECT CAST ('<Name>' + REPLACE(@empid, ',', '</Name><Name>') + '</Name>' AS XML) AS [Names]) AS A
    cross APPLY Names.nodes('/Name') as T(C) 

私はこれを私のspで使用していますが、複数の値にこれを渡すのが難しくなっています。

4

1 に答える 1

1

テーブル変数を使用してデータをストアド プロシージャに渡すことを考えたことがありますか。例:

設定

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

これで、EmpIdValuesType 型の一時テーブル変数に行を挿入し、その変数をストアド プロシージャに渡すことができます。

ストアド プロシージャの呼び出し

DECLARE @empIds AS EmpIdValuesType

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

Exec usp_GetEmployees @empIds;

結果は次のとおりです。 SQL の結果

SQLフィドル

于 2012-11-06T21:47:08.183 に答える