【发布时间】:2017-04-06 20:28:04
【问题描述】:
这更特定于 MS SQL(>2008,但主要与版本无关)。
我希望简化 SQL Server 中存储过程的检查。 我想结束的是这样的:
IF (dbo.PROC_EXISTS(N'MY_STORED_PROC_NAME') = 1)
DROP PROCEDURE MY_STORED_PROC_NAME
GO
我目前拥有的:
SELECT
CAST(
CASE
WHEN EXISTS (
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'GET_ALT_SCHEDULE')
AND type IN (N'P', N'PC')
)
THEN 'TRUE'
ELSE 'FALSE'
END
AS BIT
)
RETURNS 1 -- TRUE
RETURNS 0 -- FALSE
当我将此代码放在函数中时,它不起作用,因为我无法返回来自 select 语句的值。
CREATE FUNCTION PROC_EXISTS(@SPName NVARCHAR)
RETURNS BIT
AS
BEGIN
DECLARE @Answer BIT
SET @Answer = SELECT -- Incorrect syntax near 'SELECT'
CAST(
CASE
WHEN EXISTS (
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(@SPName)
AND type IN (N'P', N'PC')
)
THEN 1
ELSE 0
END
AS BIT
)
RETURN @Answer
END
有人可以提供一些关于发生了什么的见解吗?如果您可以解决如何组合此函数以返回我正在寻找的内容(根据第一个代码块)
或者某个函数可能不适合这种情况。但请说明原因。
【问题讨论】:
标签: sql .net sql-server user-defined-functions