私はコンマで接続されたIDを持つ文字列を返す関数を持っています。
CREATE FUNCTION [dbo].[fGetChildIdByPId]
(
@ID INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @RET VARCHAR(1000)
SET @RET = ''
DECLARE CUR CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR
SELECT ID FROM tControl WHERE parentID = @ID
OPEN CUR
FETCH FROM CUR INTO @ID
WHILE @@FETCH_STATUS = 0
BEGIN
SET @RET = @RET + CAST(@ID AS VARCHAR(10)) + ','
+ dbo.fGetChildIdByPId(@ID)
FETCH NEXT FROM CUR INTO @ID
END
CLOSE CUR
DEALLOCATE CUR
RETURN @RET
END
別の関数では、そのような別の選択クエリで前の関数から返された文字列を使用したい:
CREATE FUNCTION ShouldOutput
(
@id int,
@gid int
)
returns int
as
begin
declare @out int
if exists(SELECT * FROM tControl
where id in (select [dbo].[fGetChildIdByPId](@id))
and summaryIndex=1 and goodId = @gid)
set @out = 1
else
set @out = 0
return @out
end
もちろん、select [dbo].fGetChildIdByPId の値を整数にキャストできず、クエリで使用できないため、問題があります。EXEC または sp_executesql を使用することを考えましたが、関数では使用できず、ストアド プロシージャでのみ使用できますが、別の SQL クエリで返された 1 または 0 の値を使用する必要があるため、関数が必要です。上記のクエリを機能させる最も簡単な方法は何ですか?