FIX: 错误的参数编号出现在自定义存储过程是否生成的该 Sp_scriptpublicationcustomprocs 的存储过程

文章翻译 文章翻译
文章编号: 827175 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

症状

当试图使用 sp_scriptpublicationcustomprocs 存储过程运行生成的自定义存储的过程时您会收到以下错误 137 消息
必须声明该变量 %.* ls
如果满足下列所有条件都为真:
  • 对该发布允许即时更新订阅 (@ allow_sync_tran = True)。
  • 启用队列的订阅服务器上的更改 (@ allow_queued_tran = True)。
  • 包含不正确自定义存储的过程与 sp_scriptpublicationcustomprocs 存储过程创建的表包含计算的列。
  • 具有正确自定义存储的过程创建的 sp_scriptpublicationcustomprocs 存储过程的表中的唯一索引。

解决方案

服务包信息

若要解决此问题,获得最新的 service pack,对于 Microsoft SQL Server 2000。有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
290211如何获取最新的 SQL Server 2000 服务包

修补程序信息

请按照"更多信息"部分以安装并激活此修复程序。

此修复程序的英文版具有文件属性 (或更高版本) 下表中列出。其格式为协调通用时间 (UTC) 列出日期和时间对这些文件。当您查看文件信息时,将转换为本地时间。若要 UTC 与本地时间之间的时差使用控制面板中的日期和时间工具中的 时区 选项卡。
   Date         Time   Version            Size    File name
   ----------------------------------------------------------------------
   31-May-2003  09:45  2000.80.818.0      78,400  Console.exe      
   24-Jun-2003  16:01  2000.80.818.0      33,340  Dbmslpcn.dll
   24-Apr-2003  17:12                    786,432  Distmdl.ldf
   24-Apr-2003  17:12                  2,359,296  Distmdl.mdf
   29-Jan-2003  16:55                        180  Drop_repl_hotfix.sql
   23-Jun-2003  13:40  2000.80.837.0   1,557,052  Dtsui.dll
   23-Jun-2003  13:40  2000.80.837.0     639,552  Dtswiz.dll
   23-Apr-2003  17:51                    747,927  Instdist.sql
   02-May-2003  16:56                      1,581  Inst_repl_hotfix.sql
   07-Feb-2003  21:40  2000.80.765.0      90,692  Msgprox.dll
   31-Mar-2003  17:07                      1,873  Odsole.sql
   04-Apr-2003  16:46  2000.80.800.0      62,024  Odsole70.dll
   07-May-2003  11:41  2000.80.819.0      25,144  Opends60.dll
   02-Apr-2003  12:48  2000.80.796.0      57,904  Osql.exe
   02-Apr-2003  14:15  2000.80.797.0     279,104  Pfutil80.dll
   04-Aug-2003  09:17                    550,780  Procsyst.sql
   22-May-2003  13:57                     19,195  Qfe469571.sql
   11-Jul-2003  08:04                  1,084,147  Replmerg.sql
   04-Apr-2003  12:53  2000.80.798.0     221,768  Replprov.dll     
   07-Feb-2003  21:40  2000.80.765.0     307,784  Replrec.dll
   13-Aug-2003  07:28                  1,086,797  Replsys.sql
   13-Aug-2003  07:28                    986,603  Repltran.sql
   29-Jul-2003  11:13  2000.80.819.0     492,096  Semobj.dll
   31-May-2003  09:27  2000.80.818.0     172,032  Semobj.rll
   05-Aug-2003  12:06                    127,884  Sp3_serv_uni.sql
   31-May-2003  16:01  2000.80.818.0   4,215,360  Sqldmo.dll
   07-Apr-2003  08:44                     25,172  Sqldumper.exe    
   19-Mar-2003  09:20  2000.80.789.0      28,672  Sqlevn70.rll
   01-Jul-2003  15:18  2000.80.834.0     180,736  Sqlmap70.dll
   07-Feb-2003  21:40  2000.80.765.0      57,920  Sqlrepss.dll
   13-Aug-2003  11:04  2000.80.851.0   7,598,161  Sqlservr.exe
   25-Jul-2003  12:44  2000.80.845.0     590,396  Sqlsort.dll
   07-Feb-2003  21:40  2000.80.765.0      45,644  Sqlvdi.dll
   24-Jun-2003  16:01  2000.80.818.0      33,340  Ssmslpcn.dll
   31-May-2003  16:01  2000.80.818.0      82,492  Ssnetlib.dll
   31-May-2003  16:01  2000.80.818.0      25,148  Ssnmpn70.dll
   31-May-2003  16:01  2000.80.818.0     158,240  Svrnetcn.dll
   31-May-2003  09:59  2000.80.818.0      76,416  Svrnetcn.exe
   30-Apr-2003  14:52  2000.80.816.0      45,132  Ums.dll
   01-Jul-2003  15:19  2000.80.834.0      98,816  Xpweb70.dll

				
注意 由于文件相关性、 最新的修补程序或包含文件的特征的可能还包含其他文件。

状态

Microsoft 已经确认这是本文"适用于"一节中列出的 Microsoft 产品中的问题。Microsoft SQL Server 2000 Service Pack 4 中,第一次已得到纠正此问题。

更多信息

若要安装并激活此修复程序,请按照下列步骤操作:
  1. 获取此修复程序,在"解决方案"中所描述的这篇文章部分。
  2. 受影响的 SQL Server 2000 发布实例中应用此修补程序。
  3. 在受影响的订阅进行重新初始化标记:
    • 对于强制订阅:

      在企业管理器中打开发布服务器的服务器树,然后找到 订阅的复制- 节点。用鼠标右键单击该受影响的订阅,然后单击 重新初始化
    • 对于请求订阅:

      在企业管理器中打开订阅服务器的服务器树,然后找到 订阅的复制- 节点。用鼠标右键单击该受影响的订阅,然后单击 重新初始化
  4. 请运行快照代理程序的受影响的出版物。
To reproduce the problem, run the following script in a server that already has replication configured:
USE master
go
CREATE DATABASE TestDatabase
go
USE TestDatabase
go

CREATE TABLE [dbo].[TestTable] (
[col1] [int] NOT NULL ,
[col2] [int] NOT NULL ,
[col3] AS ([col1] + [col2]) ,
[msrepl_tran_version] [uniqueidentifier] NOT NULL
) ON [PRIMARY]
go

ALTER TABLE [dbo].[TestTable] WITH NOCHECK ADD
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[col1]
) ON [PRIMARY]
go

ALTER TABLE [dbo].[TestTable] ADD
CONSTRAINT [DF_TestTable_msrepl_tran_vers] DEFAULT (newid()) FOR
[msrepl_tran_version]
go

CREATE UNIQUE INDEX [IX_T1UNIQUE] ON
[dbo].[TestTable]([msrepl_tran_version]) ON [PRIMARY]
go

use [TestDatabase]
go
exec sp_replicationdboption @dbname = N'TestDatabase', @optname = N'publish', @value = N'true'
go
exec sp_addpublication @publication = N'TestDatabase', @restricted = N'false', 
			@sync_method = N'native', @repl_freq = N'continuous', 
			@description = N'Transactional publication of TestDatabase database from Publisher NAURU-SRV-01.', 
			@status = N'inactive', @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'false', 
			@enabled_for_internet = N'false', @independent_agent = N'false', @immediate_sync = N'false', 
			@allow_sync_tran = N'true', @autogen_sync_procs = N'true', @retention = 336, 
			@allow_queued_tran = N'true', @snapshot_in_defaultfolder = N'true', 
			@compress_snapshot = N'false', @ftp_port = 21, @allow_dts = N'false', 
			@allow_subscription_copy = N'false', @conflict_policy = N'pub wins', 
			@centralized_conflicts = N'true', @conflict_retention = 14, 
			@queue_type = N'sql', @add_to_active_directory = N'false'

exec sp_addpublication_snapshot @publication = N'TestDatabase',@frequency_type = 4, @frequency_interval = 1, 
				@frequency_relative_interval = 0, @frequency_recurrence_factor = 1, 
				@frequency_subday = 1, @frequency_subday_interval = 0, @active_start_date = 0, 
				@active_end_date = 20030814, @active_start_time_of_day = 224200, @active_end_time_of_day = 0

exec sp_addarticle @publication = N'TestDatabase', @article = N'TestTable', @source_owner = N'dbo', 
				@source_object = N'TestTable', 
				@destination_table = N'TestTable', @type = N'logbased', @creation_script = null, 
				@description = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000000CEF3, 
				@status = 16, @force_invalidate_snapshot = 1, @vertical_partition = N'false', 
				@ins_cmd = null, @del_cmd = null, @upd_cmd = null, @filter = null, @sync_object = null, 
				@auto_identity_range = N'false'

exec sp_changepublication @publication = N'TestDatabase', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1, 
				@property = N'status', @value = N'active'

After the publication is created, if you run the following statement:
exec sp_scriptpublicationcustomprocs 'TestDatabase'

您将收到以下 (不正确的) 的脚本:
--
-- Transactional replication custom procedures for publication 'TestDatabase' from database 'TestDatabase':
--


----
---- Replication custom procedures for article 'TestTable':
----

if exists (select * from sysobjects where type = 'P' and name = 'sp_MSins_TestTable')  drop proc [sp_MSins_TestTable]
go
create procedure [sp_MSins_TestTable] @c1 int,@c2 int,@c3 uniqueidentifier,@c4 int

AS
BEGIN

if not exists (select * from [TestTable] 
 where  ( [col1] = @c1 )  or  ( [col4] = @c5 ) 
)
BEGIN

insert into [TestTable]( 
[col1], [col2], [msrepl_tran_version], [col4]
 )

values ( 
@c1, @c2, @c3, @c4
 )

END
END
go

if exists (select * from sysobjects where type = 'P'  and name = 'sp_MSupd_TestTable')  drop proc [sp_MSupd_TestTable]
go
create procedure [sp_MSupd_TestTable] 
 @c1 int,@c2 int,@c3 uniqueidentifier,@c4 int,@c5 int,@c6 int,@c7 uniqueidentifier,@c8 int
as

if not exists (select * from [TestTable] 
 where  ( [col4] = @c9 and @c9 != @c5 ) 
)
begin
if @c5 = @c1
begin
update [TestTable] set [col2] = @c6,[msrepl_tran_version] = @c7,[col4] = @c8
where [col1] = @c1
 and msrepl_tran_version = @c3
end
else
begin

if not exists (select * from [TestTable] 
 where  ( [col1] = @c5 ) 
)
begin
update [TestTable] set [col1] = @c5,[col2] = @c6,[msrepl_tran_version] = @c7,[col4] = @c8
where [col1] = @c1
 and msrepl_tran_version = @c3

end
end

end
go

if exists (select * from sysobjects where type = 'P' and name = 'sp_MSdel_TestTable')  drop proc [sp_MSdel_TestTable]
go
create procedure [sp_MSdel_TestTable] @c1 int,@c2 int,@c3 uniqueidentifier,@c4 int
as
delete [TestTable]
where [col1] = @c1
 and msrepl_tran_version = @c3
go

请注意自定义插入存储的过程,sp_MSins_TestTable,引用参数的名为 @ c5@ c5 未声明为参数的过程的自定义更新和存储的过程 sp_MSupd_TestTable 引用另一个未定义的参数名为 @ c9

属性

文章编号: 827175 - 最后修改: 2014年2月26日 - 修订: 3.4
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
关键字:?
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB827175 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 827175
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com