sql - SQL Server中根据行的值调用特定的存储过程/选择语句

标签 sql sql-server loops stored-procedures case

在 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/

相关文章:

sql - 在sql中复制数据时添加列

mysql - 在 GROUP BY (MYSQL QUERY) 中包含空组

sql - 我可以在 Oracle SQL 中组合多个列的一部分吗

c - 如何在C中正确操作字符串

sql - 在窗口函数的 FILTER 子句中引用当前行

sql-server - 如何从 xml 节点中提取数据作为列中的表?

sql - 为什么 ss 舍入到最接近的分钟,这将改变一天

sql - XML 到 SQL Server 中的几个具有相同名称的元素到不同的列中

java - 解码 .txt 文件中的 Base64 时遇到问题

python - 在字符串切片中包含完整的单词