USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SMARTQUERYINSTANCEID | uniqueidentifier | IN | |
@TVFNAME | nvarchar(128) | IN | |
@TVFPARAMETERVALUES | nvarchar(max) | IN | |
@ISSTATIC | bit | IN | |
@USEINQUERYDESIGNER | bit | IN | |
@NUMROWS | int | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@IDSETREGISTERID | uniqueidentifier | INOUT | |
@TVFSCHEMA | nvarchar(128) | IN |
Definition
Copy
CREATE procedure [dbo].[USP_SMARTQUERYINSTANCE_CREATEORUPDATEIDSET]
@SMARTQUERYINSTANCEID [uniqueidentifier],
@TVFNAME nvarchar(128),
@TVFPARAMETERVALUES nvarchar(max),
@ISSTATIC bit = 0,
@USEINQUERYDESIGNER [bit] = 0,
@NUMROWS [int] = null,
@CHANGEAGENTID [uniqueidentifier] = null,
@IDSETREGISTERID uniqueidentifier = null output,
@TVFSCHEMA nvarchar(128) = 'dbo'
with execute as owner
as
set nocount on;
begin try
-- update the IDSetRegister
exec USP_IDSETREGISTER_CREATEORUPDATEFORSMARTQUERYINSTANCE @SMARTQUERYINSTANCEID, @ISSTATIC, @USEINQUERYDESIGNER, @NUMROWS, @CHANGEAGENTID, @IDSETREGISTERID output
declare @FUNCTIONNAME as nvarchar(128)
declare @PRIMARYKEYFIELD nvarchar(128)
declare @OBJID as integer
declare @STATICTABLE nvarchar(128)
declare @CREATEFUNCTIONSQL as
nvarchar(max)
select @PRIMARYKEYFIELD = PRIMARYKEYFIELD from SMARTQUERYCATALOG
inner join dbo.SMARTQUERYINSTANCE on SMARTQUERYCATALOG.ID = SMARTQUERYINSTANCE.SMARTQUERYCATALOGID
where SMARTQUERYINSTANCE.ID = @SMARTQUERYINSTANCEID;
set @STATICTABLE
= dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETSTATICTABLENAME(@SMARTQUERYINSTANCEID)
set @FUNCTIONNAME = dbo.UFN_SMARTQUERYINSTANCE_MAKEIDSETFUNCTIONNAME(@SMARTQUERYINSTANCEID)
set @OBJID = null
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 [' + @FUNCTIONNAME + ']()'
else
set @CREATEFUNCTIONSQL = 'create function [' + @FUNCTIONNAME + ']()'
declare @DOCREATEFUNCTION bit
if @ISSTATIC = 1
begin
set @CREATEFUNCTIONSQL = @CREATEFUNCTIONSQL + '
returns table
as
return
(select DISTINCT ID from dbo.[' + @STATICTABLE + '])'
set @DOCREATEFUNCTION = 1
end
else
begin
set @CREATEFUNCTIONSQL = @CREATEFUNCTIONSQL + '
returns table
as
return
(
'
set @CREATEFUNCTIONSQL = @CREATEFUNCTIONSQL + 'select DISTINCT ' + @PRIMARYKEYFIELD + ' ID from ' + @TVFSCHEMA + '.' + @TVFNAME + '(' + @TVFPARAMETERVALUES + '))';
set @DOCREATEFUNCTION = 1;
end
if @DOCREATEFUNCTION = 1
begin
-- execute the sql to create or alter the function and grant rights
exec (@CREATEFUNCTIONSQL)
if @OBJID is null
begin
exec ('grant select on [' + @FUNCTIONNAME + '] to BBAPPFXSERVICEROLE');
exec ('grant select on [' + @FUNCTIONNAME + '] to BBAPPFXREPORTROLE');
end;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
end catch