Home Microsoft SQL Server DigiMailing iRN Contact
    Keyword



sys.sp_mergedummyupdate

  No additional text.


Syntax

create procedure sys.sp_mergedummyupdate(
	@source_object	nvarchar (386),
	@rowguid		uniqueidentifier
)
as
	-- Security check
	if 1 <> is_member('db_owner')
	begin
		RAISERROR (15247, 11, -1)
		return (1)
	end
	
	declare @object			sysname	
	declare @owner			sysname	
	declare @tablenick		int
	declare @tablenickstr	nvarchar(11)
	declare @retcode		int
	declare @islightweight	bit
	declare @coltracked		bit

	select @object = PARSENAME(@source_object, 1)
	select @owner = PARSENAME(@source_object, 2)
	execute sys.sp_MStablenickname @owner, @object, @tablenick output
	if @tablenick IS NULL or @@ERROR<>0
	BEGIN
		raiserror (20003, 11, -1, @object)
		RETURN (1)
	END
	set @tablenickstr = convert(nchar, @tablenick)

	declare @rowguidstr nvarchar(40)
	if @rowguid IS NULL
	begin
		raiserror (14043, 11, -1, '@rowguid', 'sp_mergedummyupdate')
		return (1)
	end
	set @rowguidstr = convert(nchar(36), @rowguid)

	-- Find out whether the row is heavy- or lightweight.
	select top 1 @islightweight= lightweight, @coltracked= column_tracking
		from dbo.sysmergearticles where nickname=@tablenick
	if @islightweight is null return 1

	if 0=@islightweight
	begin
	    declare @quoted_source_object nvarchar(517)
	    if @owner is null
	    	set @quoted_source_object= quotename(@object)
	    else
	    	set @quoted_source_object= quotename(@owner) + '.' + quotename(@object)

		/*
		** If the row does not exist in the base table, call sp_MSdummyupdate with metadata_type = 1 (tombstone)
		*/
		exec ('if not exists (select 1 from ' + @quoted_source_object + ' where rowguidcol = ''' +
			@rowguidstr + ''' ) exec sys.sp_MSdummyupdate ''' + @rowguidstr + ''',' + @tablenickstr + ', 1')

		/*
		** If the row exists in the base table and MSmerge_contents , call sp_MSdummyupdate with metadata_type = 2 (contents)
		*/
		exec ('if exists (select 1 from ' + @quoted_source_object + ' where rowguidcol = ''' +
			@rowguidstr + ''' ) and exists (select rowguid from dbo.MSmerge_contents where rowguid = ''' +
			@rowguidstr + ''' ) exec sys.sp_MSdummyupdate ''' + @rowguidstr + ''',' + @tablenickstr + ', 2')

		/*
		** If the row exists in the base table, but not in MSmerge_contents , call sp_MSdummyupdate with metadata_type = 3 (contents_deferred)
		*/
		exec ('if exists (select 1 from ' + @quoted_source_object + ' where rowguidcol = ''' +
			@rowguidstr + ''' ) and not exists (select rowguid from dbo.MSmerge_contents where rowguid = ''' +
			@rowguidstr + ''' ) exec sys.sp_MSdummyupdate ''' + @rowguidstr + ''',' + @tablenickstr + ', 3')
	end
	else
	begin
		declare @metatype tinyint
		declare @metatype_dummyupdate tinyint

		declare @METADATA_TYPE_Missing tinyint
		declare @METADATA_TYPE_Tombstone tinyint
		declare @METADATA_TYPE_Contents tinyint
		declare @METADATA_TYPE_ContentsDeferred tinyint
		declare @METADATA_TYPE_InsertLightweight tinyint
		declare @METADATA_TYPE_UpdateLightweight tinyint
		declare @METADATA_TYPE_DeleteLightweight tinyint
		declare @METADATA_TYPE_UpsertLightweightProcessed tinyint
		declare @METADATA_TYPE_DeleteLightweightProcessed tinyint

		declare @METADATA_ACTION_Default tinyint

		select @metatype= changetype from dbo.MSmerge_rowtrack
			where tablenick=@tablenick and rowguid=@rowguid

		set @METADATA_TYPE_Missing= 0
		set @METADATA_TYPE_Tombstone= 1
		set @METADATA_TYPE_Contents= 2
		set @METADATA_TYPE_ContentsDeferred= 3
		set @METADATA_TYPE_InsertLightweight= 7
		set @METADATA_TYPE_UpdateLightweight= 8
		set @METADATA_TYPE_DeleteLightweight= 10
		set @METADATA_TYPE_UpsertLightweightProcessed= 11
		set @METADATA_TYPE_DeleteLightweightProcessed= 12

		set @METADATA_ACTION_Default= 0

		if @metatype=@METADATA_TYPE_DeleteLightweight
		begin
			-- If the metatype expresses an unprocessed delete, just make sure the delete
			-- does not look as if it is already being uploaded.

			update dbo.MSmerge_rowtrack
				set sync_cookie= null
				where tablenick=@tablenick and rowguid=@rowguid

			return 0
		end
		else if @metatype in (@METADATA_TYPE_InsertLightweight,
						 @METADATA_TYPE_UpdateLightweight,
						 @METADATA_TYPE_UpsertLightweightProcessed)
		begin
			-- The metatype expresses a processed or unprocessed change; make sure the entire
			-- row will be resent.
			set @metatype_dummyupdate= @METADATA_TYPE_Contents
		end
		else if @metatype=@METADATA_TYPE_DeleteLightweightProcessed
		begin
			-- Make sure the delete will be resent.
			set @metatype_dummyupdate= @METADATA_TYPE_Tombstone
		end
		else
		begin
			-- Figure out whether the base data exists.
			declare @baserowexists bit
		    declare @procname	nvarchar(512)
		    declare @postfix	nchar(32)

			-- Take any multipurpose proc that exists for this article, regardless of the publication.
			select top 1 @postfix= procname_postfix
				from dbo.sysmergearticles
				where nickname = @tablenick
			
			set @procname= quotename('MSmerge_lws_sp_multi_' + @postfix)

		    exec @retcode= @procname
		    					@action= 5,
		    					@rowguid= @rowguid,
		    					@baserowexists= @baserowexists output
	    	if @@error <>0 or @retcode <> 0 return (1)

	    	if 1=@baserowexists
	    	begin
				-- The base row is here, but no metadata; make sure the entire
				-- row will be resent.
				set @metatype_dummyupdate= @METADATA_TYPE_ContentsDeferred
			end
			else
			begin
	    		-- There is neither data nor metadata. Make sure the row will be deleted.
				set @metatype_dummyupdate= @METADATA_TYPE_Missing
			end
		end

		exec @retcode= sys.sp_MSdummyupdatelightweight
								@tablenick=	@tablenick,
								@rowguid=	@rowguid,
								@action=	@METADATA_ACTION_Default,
								@metatype=	@metatype_dummyupdate,
								@rowvector= null
		if @@error<>0 or @retcode<>0 return 1

		return 0
	end

 
Last revision 2008RTM
See also

  sp_MSdrop_rladmin (Procedure)
       



News

  Query a named instance
Sybase+ASE+silent+install
SQL 2008 R2
Deprecated procedures in SQL2008
Reporting Services item-level role definitions
Create all your missing indexes
Converting datetime field
Start MSSQL Server Profiler at time
Replicating MSSQL Server views
Exploring Microsoft Sharepoint
The OLE DB provider "SQLNCLI10" for linked server indicates.
Mobile solar charger
Oracle to SQL Server replication
Cannot insert the value NULL into column
Undocumented Microsoft SQL Server 2008
VMware
Zoekmachine optimalisatie
SQL Servers hidden objects
FckEditor
Flash in Ajax
De hype die AJAX heet
Barcode scannen
MySQL; Gratis, makkelijk en snel!
PHP
sIFR; de combinatie tussen HTML en Flash