SQL 选择 Id 列表并通过 SP 运行它们

ove*_*ing 3 sql sql-server-2008-r2

我刚刚使用 Microsoft SQL Server 2008 R2 启动 SQL,我想选择一个 Id 列表并通过存储过程运行每个 Id,但不知道如何执行。

SELECT Id 
FROM UserId 
WHERE ProgramId = @ProgramId
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个名为temp_sp_UpdateIds

通常我可以运行存储过程

EXEC temp_sp_UpdateIds @ProgramId
Run Code Online (Sandbox Code Playgroud)

但我不确定如何使用从 select 语句返回的 Id 列表运行存储过程并将其放在@ProgramId

我需要将 Id 存储在本地表中吗?

谢谢。

Ale*_*nko 6

您可以使用表值参数

创建表类型和 SP

CREATE TYPE dbo.ListOfIds AS TABLE(Id int PRIMARY KEY)
GO

CREATE PROCEDURE dbo.temp_sp_UpdateIds
 (
  @ListOfIds dbo.ListOfIds READONLY
  )
AS
BEGIN
...body of procedure
END
GO
Run Code Online (Sandbox Code Playgroud)

使用表值参数调用过程

DECLARE @ListOfIds dbo.ListOfIds
INSERT @ListOfIds
SELECT Id
FROM UserId
WHERE ProgramId = @ProgramId

EXEC dbo.temp_sp_UpdateIds @ListOfIds
Run Code Online (Sandbox Code Playgroud)

参见SQLFiddle