USP_IDSET_CREATEORUPDATE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FUNCTIONNAME | nvarchar(128) | IN | |
@STATICTABLE | nvarchar(128) | IN | |
@STATIC | bit | IN | |
@IDCOLUMNTYPENAME | nvarchar(128) | IN | |
@SQLWITHCLAUSE | nvarchar(max) | IN | |
@SQL | nvarchar(max) | IN | |
@NUMROWS | int | IN | |
@CHANGEAGENTID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_IDSET_CREATEORUPDATE
(
@FUNCTIONNAME nvarchar(128),
@STATICTABLE nvarchar(128),
@STATIC bit = 0,
@IDCOLUMNTYPENAME nvarchar(128),
@SQLWITHCLAUSE nvarchar(max),
@SQL nvarchar(max),
@NUMROWS int = null,
@CHANGEAGENTID uniqueidentifier = null
)
with execute as caller
as
set nocount on;
declare @OBJID as int;
declare @CREATEFUNCTIONSQL as nvarchar(max);
declare @WITHASOFDATEOBJID as int;
declare @FUNCTIONNAMEWITHASOFDATE as nvarchar(255);
declare @CREATEFUNCTIONSQLWITHASOFDATE as nvarchar(max);
set @FUNCTIONNAMEWITHASOFDATE = @FUNCTIONNAME + '_WITHASOFDATE';
-- build the dynamic sql to create (or alter) the table-valued function containing the IDs and sequence for the given sql
select @OBJID = id from dbo.sysobjects where id = object_id(N'[dbo].[' + @FUNCTIONNAME + ' ]') and type in (N'FN', N'IF', N'TF', N'FS', N'FT');
if not @OBJID is null
-- function already exists so use alter
set @CREATEFUNCTIONSQL = 'alter function dbo.[' + @FUNCTIONNAME + ']()';
else
set @CREATEFUNCTIONSQL = 'create function dbo.[' + @FUNCTIONNAME + ']()';
select @WITHASOFDATEOBJID = id from dbo.sysobjects where id = object_id(N'[dbo].[' + @FUNCTIONNAMEWITHASOFDATE + ' ]') and type in (N'FN', N'IF', N'TF', N'FS', N'FT');
if not @WITHASOFDATEOBJID is null
-- function already exists so use alter
set @CREATEFUNCTIONSQLWITHASOFDATE = 'alter function dbo.[' + @FUNCTIONNAMEWITHASOFDATE + '](@ASOFDATE datetime)';
else
set @CREATEFUNCTIONSQLWITHASOFDATE = 'create function dbo.[' + @FUNCTIONNAMEWITHASOFDATE + '](@ASOFDATE datetime)';
set @CREATEFUNCTIONSQLWITHASOFDATE = @CREATEFUNCTIONSQLWITHASOFDATE + '
returns table
as
return
('
if @STATIC = 1
begin
set @CREATEFUNCTIONSQLWITHASOFDATE = @CREATEFUNCTIONSQLWITHASOFDATE + 'select DISTINCT ID from dbo.[' + @STATICTABLE + '])'
end
else
begin
set @CREATEFUNCTIONSQLWITHASOFDATE=@CREATEFUNCTIONSQLWITHASOFDATE +
'
'
+coalesce(@SQLWITHCLAUSE, '') +
'
'
set @CREATEFUNCTIONSQLWITHASOFDATE = @CREATEFUNCTIONSQLWITHASOFDATE + 'select DISTINCT QUERYRECID as ID '
set @CREATEFUNCTIONSQLWITHASOFDATE = @CREATEFUNCTIONSQLWITHASOFDATE + ' from
(' + @SQL + ') as QRESULTS)'
end
-- execute the sql to create or alter the function and grant rights
exec (@CREATEFUNCTIONSQLWITHASOFDATE)
if @WITHASOFDATEOBJID is null
exec dbo.USP_IDSET_GRANTRIGHTSTOFUNCTION @FUNCTIONNAMEWITHASOFDATE, 'select'
set @CREATEFUNCTIONSQL = @CREATEFUNCTIONSQL + '
returns table
as
return
(select distinct ID from dbo.[' + @FUNCTIONNAMEWITHASOFDATE + '](getdate()) as QRESULTS)';
-- execute the sql to create or alter the function and grant rights
exec (@CREATEFUNCTIONSQL)
if @OBJID is null
exec dbo.USP_IDSET_GRANTRIGHTSTOFUNCTION @FUNCTIONNAME, 'select'