the*_*rer 4 sql t-sql sql-server stored-procedures
我有一个存储过程,它根据指定的输入参数调用其他存储过程。
它看起来是这样的:
CREATE PROCEDURE dbo.usp_SPCaller
@Input_Param1 NVARCHAR(100) = NULL,
@Input_Param2 NVARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON
IF ((@Input_Param1 IS NOT NULL) AND (@Input_Param2 IS NOT NULL))
BEGIN
EXEC dbo.usp_SPWithParam1And2
END
IF ((@Input_Param1 IS NOT NULL) AND (@Input_Param2 IS NULL))
BEGIN
EXEC dbo.usp_SPWithParam1Only
END
IF ((@Input_Param1 IS NULL) AND (@Input_Param2 IS NOT NULL))
BEGIN
EXEC dbo.usp_SPWithParam2Only
END
IF ((@Input_Param1 IS NULL) AND (@Input_Param2 IS NULL))
BEGIN
EXEC dbo.usp_SPWithoutParam1And2
END
Run Code Online (Sandbox Code Playgroud)
在向我们的领导介绍这一点后,他建议我改用 CASE 语句,因为使用 IF 语句是一个坏主意。
我尝试到处搜索如何以与上面相同的格式使用案例陈述,但无济于事。我发现的只是将 CASE STATMENTS 与 UPDATE 一起使用。
如何以如上所示的方式在 SQL SERVER 中使用 CASE 语句?
尝试这段代码..这里我将过程名称(要执行的)存储在名为的变量中@sql,最后使用sp_executesql
CREATE PROCEDURE dbo.usp_SPCaller
@Input_Param1 NVARCHAR(100) = NULL,
@Input_Param2 NVARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON
DECLARE @sql AS NVARCHAR(MAX)
set @sql = case
when ((@Input_Param1 IS NOT NULL) AND (@Input_Param2 IS NOT NULL))
then 'dbo.usp_SPWithParam1And2'
when ((@Input_Param1 IS NOT NULL) AND (@Input_Param2 IS NULL))
then 'dbo.usp_SPWithParam1Only'
when((@Input_Param1 IS NULL) AND (@Input_Param2 IS NOT NULL))
then 'dbo.usp_SPWithParam2Only'
when ((@Input_Param1 IS NULL) AND (@Input_Param2 IS NULL))
then 'dbo.usp_SPWithoutParam1And2'
END
print @sql
EXEC sp_executesql @sql
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43059 次 |
| 最近记录: |