reede, 29. mai 2009

SQL SERVER UDF funktsiooni teksti sisust parameetri vaikeväärtuse teadasaamine

Kui süsteemis on kasutusel meetod, kus mingi asja käitumine sõltub näiteks UDF funkstiooni parameetri väärtusest ja nüüd vaja teada
saada, kuidasmoodi see parameeter on seatud saab kasutada sellist

Funktsiooni päis ise, mille parameetrit teada tahame

ALTER FUNCTION [dbo].[VIITENUMBER]( @lepingu_nr INT, @arvenumber BIGINT, @meetod TINYINT=0 )
RETURNS NVARCHAR(30)
AS
...

ja siin @meetod TINYINT=0 vaikeväärtus määrab ära, kuidas süsteem peab käituma
siis selle väärtuse teadasaamiseks võib kasutada lähenemist, kus otsime funktsioon teksti sisust

DECLARE @t VARCHAR(8000), @Re INT
--leiame funktsiooni VIITENUMBER
SET @Re = ( SELECT TOP 1 ID FROM sys.sysobjects WHERE name = 'VIITENUMBER' AND XTYPE ='FN' )
--leiame tema sisu kirjelduse alguse
SET @t = ( SELECT LEFT(TEXT,8000) FROM sys.syscomments WHERE ID = @Re )
--otsime tema teksti kirjeldusest viitenumbri meetodi parameetri kohta
SET @Re=CHARINDEX('@meetod TINYINT=',@t)
--võtame antud kohast 3 tükki ja kuna on funktsiooni viimane parameeter siis lõpust ) eemaldame
SET @t = (SELECT REPLACE(SUBSTRING(@t,@Re+16,3),')','') )

ja @t väärtus peaks olema antud juhul '0', mida otsisimegi