【发布时间】:2018-12-05 14:18:30
【问题描述】:
我正在创建存储过程 (sprocs) 来对数据库中的表执行操作。我有一个 sproc SubjectExists 如果输入的主题名称在主题表中则返回“1”,如果不存在则返回“0”。
CREATE PROCEDURE SubjectExists @SubjName varhcar(20)
AS
SELECT CASE WHEN EXISTS(
SELECT *
FROM Subject
WHERE Subject_Name = @SubjName
)
THEN CAST (1 AS BIT)
ELSE CAST (0 AS BIT)
END
我现在正在制作另一个从表中删除主题的存储过程。我想让这个存储过程使用SubjectExists,如果它的输出是1(即主题确实存在),那么它会删除主题,如果SubjectExists的输出是0,它什么也不做。
我该怎么做呢?
我尝试过以下方法,但到目前为止没有运气。
CREATE PROCEDURE DeleteSubject @SubjName varchar(20)
AS
IF (EXEC StudentExists Bob)
DELETE FROM Subject
WHERE Subject_Name = @SubjName;
谁能指导我如何做到这一点。 谢谢
【问题讨论】:
-
您使用的是哪个 dbms?
-
@jarlh Microsoft SQL Server Management Studio
-
我建议你不要。 T-SQL 的模块化功能非常有限。尝试应用其他语言中的“最佳实践”将导致困难。将此代码打包为内联表值函数(不是多语句函数!)与您将获得一个体面的解决方案一样接近,但这仍然不如在原始过程中扩展条件。 (有关完整故事,请参阅this。)
-
为什么要写这样的代码?只需按原样执行
DELETE。您尝试执行的操作将执行完全相同的查询两次
标签: sql-server tsql if-statement stored-procedures