これは、MS SQL(> 2008、しかしほとんどの場合、バージョンに依存しない)に特有です。UDFのリターンビット
私は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
誰かが何が起こっているかについていくつかの洞察を提供できますか?この関数がどのようにして私が探しているものを返すように構成できるかについての解答ができる場合(最初のコードブロックごとに)
おそらくこのシナリオでは関数が適切ではありません。しかし、理由を述べてください。
ありがとう!これはまさに私が探していたものです。おそらくobject_id()を使用することになります。それが私が本当に求めていたものです。機能についての鉱石の深い説明もあきらめてください。そのことを実際に見ることは素晴らしいことです。 – EdwinJackson
@EdwinJackson喜んで助けてください! – SqlZim