在 SQL Server 中,是否有一种方法可以根据表中列的值来调用特定的存储过程/内联选择语句?
例如对于表 #IdNumbers
(如下)中的每一行,检查 Number
列的值 - 如果该值为 1,则调用第一个存储过程,如果该值为 2然后调用第二个过程,依此类推。
我正在尝试实现与下面的代码类似的功能(但没有伪代码)。
CREATE PROCEDURE [CallSpecificStoredProcedure]
(
@Name VARCHAR(50)
,@StartDate DATETIME
,@EndDate DATETIME
)
AS
BEGIN
CREATE TABLE #IdNumbers
(
Id UNIQUEIDENTIFIER,
Number INT
)
INSERT INTO #IdNumbers
exec GetIdNumbers @StartDate, @EndDate
--for each row in #IdNumbers
--If Number = 1
exec StoredProcedure1(Id, Number, @Name, @StartDate, @EndDate)
--else If Number = 2
exec StoredProcedure2(Id, Number, @Name, @StartDate, @EndDate)
--else If Number = 3
exec StoredProcedure3(Id, Number, @Name, @StartDate, @EndDate)
END
最佳答案
为此您需要光标。这希望有效:
CREATE PROCEDURE [p_CallSpecificStoredProcedure]
(
@Name VARCHAR(50),
@StartDate DATETIME,
@EndDate DATETIME
)
AS
BEGIN
CREATE TABLE #IdNumbers
(
Id UNIQUEIDENTIFIER,
Number INT
)
INSERT INTO #IdNumbers
exec GetIdNumbers @StartDate, @EndDate
DECLARE @Id UNIQUEIDENTIFIER
DECLARE @Number INT
DECLARE IdCursor CURSOR FAST_FORWARD FOR
SELECT Id, Number FROM #IdNumbers
OPEN IdCursor
FETCH NEXT FROM IdCursor
INTO @Id, @Number
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Number = 1
EXEC StoredProcedure1 @Id, @Number, @Name, @StartDate, @EndDate
ELSE IF @Number = 2
EXEC StoredProcedure2 @Id, @Number, @Name, @StartDate, @EndDate
ELSE IF @Number = 3
EXEC StoredProcedure3 @Id, @Number, @Name, @StartDate, @EndDate
FETCH NEXT FROM IdCursor
INTO @Id, @Number
END
CLOSE IdCursor
DEALLOCATE IdCursor
END
关于sql - SQL Server中根据行的值调用特定的存储过程/选择语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42533427/