The meta data is from an SQL 2012 Server.
I have posted alot more, find the whole list here.
Goto Definition or MetaData
Definition:
sys.sp_MScreatelightweightinsertproc(uniqueidentifier @pubid, uniqueidentifier @artid)
MetaData:
create procedure sys.sp_MScreatelightweightinsertproc @pubid uniqueidentifier, @artid uniqueidentifier as set nocount on declare @argname nvarchar(10) declare @id int declare @tablenick int declare @destination_object sysname declare @destination_owner sysname declare @qualified_name nvarchar(270) declare @colid int declare @previouscolid int declare @colname nvarchar(200) declare @typename nvarchar(258) declare @len smallint declare @prec int declare @scale int declare @isidentitycolumn bit declare @is_identitynotforreplication bit declare @columnordinal smallint declare @retcode int declare @comma nvarchar(2) declare @cmdpiece nvarchar(4000) declare @postfix nchar(32) declare @maintainsmetadata bit declare @coltracked bit declare @enumtype_str nvarchar(100) declare @cmdtable table (phase int not null, step int identity not null, cmdtext nvarchar(4000) collate database_default null) -- Security check exec @retcode= sys.sp_MSreplcheck_subscribe if @@error <> 0 or @retcode <> 0 return (1) select @tablenick= nickname, @destination_object= destination_object, @postfix= procname_postfix, @destination_owner= destination_owner, @coltracked= column_tracking from dbo.sysmergearticles where pubid = @pubid and artid = @artid if 1=@coltracked begin set @enumtype_str= '@COLUMNS_ENUMERATED_ChangedOnly' end else begin set @enumtype_str= '@COLUMNS_ENUMERATED_AllOnOtherReason' end set @maintainsmetadata= sys.fn_MSarticle_allows_DML_at_this_replica(@artid, default) if @destination_owner is null or @destination_owner='' select @qualified_name = quotename(@destination_object) else select @qualified_name = quotename(@destination_owner) + '.' + quotename(@destination_object) -- Phase 0: Create procedure and fixed part of argument list. if 1 = @maintainsmetadata begin set @cmdpiece= 'create procedure dbo.' + quotename('MSmerge_lws_sp_ins_' + @postfix) + ' @rowguid uniqueidentifier, @rowvector varbinary(11)' end else begin set @cmdpiece= 'create procedure dbo.' + quotename('MSmerge_lws_sp_ins_' + @postfix) + ' @rowguid uniqueidentifier' end insert into @cmdtable (phase, cmdtext) values (0, @cmdpiece) -- Phase 1: Column arguments list. This will be done later. -- Phase 2: Open procedure body. set @cmdpiece=' as declare @errcode int set nocount on' insert into @cmdtable (phase, cmdtext) values (2, @cmdpiece) -- phase 3,4 and 5 are optional. Used only for downloadonly -- articles to call update proc before attempting insert. if 1 <> @maintainsmetadata begin -- phase 3 : fixed part of the call to update proc. set @cmdpiece = ' -- Call the update proc first because this is a download only article set @errcode= 0 exec @errcode = dbo.' + quotename('MSmerge_lws_sp_upd_' + @postfix) + ' @rowguid = @rowguid, @setnullbm = 0x00 ' insert into @cmdtable (phase, cmdtext) values (3, @cmdpiece) -- phase 4 is rest of argument list; goes in during loop over columns -- phase 5 is the reset of the fixed part of the call to -- update proc set @cmdpiece = ' if @errcode = 1 return(1)' insert into @cmdtable (phase, cmdtext) values (5, @cmdpiece) end -- phase 6 set @cmdpiece='-- Security check if (is_member(''db_owner'') <> 1) begin raiserror(15247,-1,-1) return (3) end declare @tablenick int set @tablenick= ' + cast(@tablenick as nvarchar(20)) + ' ' insert into @cmdtable (phase, cmdtext) values (6, @cmdpiece) -- Phase 7: Enable identity_insert, if needed. This is done later. -- Phase 8: Add all code up to column list in insert statement. if 1=@maintainsmetadata begin set @cmdpiece= ' declare @METADATA_TYPE_UpsertLightweightProcessed tinyint' if 1=@coltracked begin set @cmdpiece=@cmdpiece + ' declare @COLUMNS_ENUMERATED_ChangedOnly tinyint set @COLUMNS_ENUMERATED_ChangedOnly= 0' end else begin set @cmdpiece=@cmdpiece + ' declare @COLUMNS_ENUMERATED_AllOnOtherReason tinyint set @COLUMNS_ENUMERATED_AllOnOtherReason= 2' end set @cmdpiece=@cmdpiece + ' set @METADATA_TYPE_UpsertLightweightProcessed= 11 begin tran save tran tran_lws_insproc update dbo.MSmerge_rowtrack set changetype= @METADATA_TYPE_UpsertLightweightProcessed, rowvector= @rowvector, changedcolumns= null, columns_enumeration= ' + @enumtype_str + ', changed= sys.fn_MSdayasnumber(getdate()), sync_cookie= null where tablenick = @tablenick and rowguid = @rowguid if @@rowcount = 0 begin insert into dbo.MSmerge_rowtrack ( tablenick, rowguid, changetype, rowvector, changedcolumns, columns_enumeration, changed, sync_cookie ) values ( @tablenick, @rowguid, @METADATA_TYPE_UpsertLightweightProcessed, @rowvector, null, ' + @enumtype_str + ', sys.fn_MSdayasnumber(getdate()), null ) if @@rowcount <> 1 begin set @errcode= 3 goto Failure end end insert into ' + @qualified_name + ' (' end -- 1=@maintainsmetadata else begin set @cmdpiece= ' insert into ' + @qualified_name + ' (' end insert into @cmdtable (phase, cmdtext) values (8, @cmdpiece) -- Phase 9: Column name list in insert statement. Will be done later. -- Phase 10: "values" keyword in insert statement set @cmdpiece= ') values (' insert into @cmdtable (phase, cmdtext) values (10, @cmdpiece) -- Phase 11: Column value list in insert statement. Will be done later. -- Phase 12: Close insert statement, and prepare for completion of the stored proc. set @cmdpiece= ') if @@rowcount <> 1 begin set @errcode= 3 goto Failure end else begin set @errcode= 1 delete from dbo.MSmerge_metadataaction_request where tablenick=@tablenick and rowguid=@rowguid goto Done end' if 1 = @maintainsmetadata begin set @cmdpiece= @cmdpiece + ' Failure: rollback tran tran_lws_insproc Done: commit tran ' end else begin set @cmdpiece= @cmdpiece + ' Failure: Done: ' end insert into @cmdtable (phase, cmdtext) values (12, @cmdpiece) -- Phase 13: Disable identity_insert, if previously enabled. This is done later. -- Phase 14: Return. set @cmdpiece= ' return(@errcode) ' insert into @cmdtable (phase, cmdtext) values (14, @cmdpiece) -- Now we loop over the columns to complete the command. -- We omit computed and timestamp columns. select @id= object_id(@qualified_name) if @id is null return (1) set @columnordinal= 0 set @previouscolid= -1 while (1=1) begin set @columnordinal= @columnordinal + 1 set @colid= (select min(column_id) from sys.columns where object_id = @id and column_id > @previouscolid and is_computed = 0 and system_type_id <> type_id('timestamp')) if @colid is null break set @previouscolid= @colid select @colname= quotename(name), @typename= type_name(system_type_id), @len= max_length, @prec= precision, @scale= scale, @isidentitycolumn= is_identity, @is_identitynotforreplication = convert(bit, isnull(columnproperty(@id, name, 'IsIdNotForRepl'), 0)) from sys.columns where object_id = @id and column_id = @colid if @typename='nvarchar' or @typename='nchar' -- a unit of nchar takes 2 bytes select @len= @len/2 exec @retcode= sys.sp_MSmaptype @typename out, @len, @prec, @scale if @@error<>0 or @retcode <>0 return (1) -- Phase 1: Add column to procedure arguments list. select @argname= '@p' + convert(nvarchar, @columnordinal) set @cmdpiece= ', ' + @argname + ' ' + @typename insert into @cmdtable (phase, cmdtext) values (1, @cmdpiece) -- Phase 4: argument list for call to update proc in downloadonly case if 1 <> @maintainsmetadata begin set @cmdpiece= ', ' + @argname + ' = ' + @argname insert into @cmdtable (phase, cmdtext) values (4, @cmdpiece) end if @columnordinal = 1 set @comma= '' else set @comma= ', ' -- Phase 9: Add column names to insert statement. set @cmdpiece= @comma + @colname insert into @cmdtable (phase, cmdtext) values (9, @cmdpiece) -- Phase 11: Add respective parameters to insert statement. set @cmdpiece= @comma + @argname insert into @cmdtable (phase, cmdtext) values (11, @cmdpiece) -- is this an identity column without 'not for replication' marking? if (@isidentitycolumn = 1) and (@is_identitynotforreplication = 0) begin -- Phase 7: Enable identity_insert. set @cmdpiece = ' set identity_insert ' + @qualified_name + ' on' insert into @cmdtable (phase, cmdtext) values (7, @cmdpiece) -- Phase 9: Disable identity_insert. set @cmdpiece = ' set identity_insert ' + @qualified_name + ' off' insert into @cmdtable (phase, cmdtext) values (13, @cmdpiece) end end -- Now we select out the command text pieces in proper order so that our caller, -- xp_execresultset, will execute the command that creates the stored procedure. select cmdtext from @cmdtable order by phase, step return 0
No comments:
Post a Comment