FIX: 不正確的參數編號會在自訂的預存程序所產生的 Sp_scriptpublicationcustomprocs 預存程序

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:827175
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
當想 sp_scriptpublicationcustomprocs 預存程序以執行所產生的自訂預存程序會收到下列錯誤 137 訊息
必須宣告該變數 ' %*! ''
如果所有下列情況成立:
  • 發行集允許立即更新訂閱 (@ allow_sync_tran = 'True')。
  • 啟用佇列的訂閱者的變更 (@ allow_queued_tran = 'True')。
  • 具有正確自訂的預存程序與 sp_scriptpublicationcustomprocs 預存程序所建立的資料表包含計算資料行。
  • 具有正確自訂的預存程序與 sp_scriptpublicationcustomprocs 預存程序所建立的資料表具有唯一索引。
解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack,Microsoft SQL Server 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
290211如何取得最新的 SQL Server 2000 Service Pack

Hotfix 資訊

請依照 < 其他相關資訊 > 一節要安裝,而且啟動這個修正程式。

此修正程式的英文版具有檔案屬性 (或更新) 中如下表所列。這些檔案的日期和時間為 Coordinated Universal Time (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				
注意 由於檔案相依性、 最新 Hotfix 或包含檔案的功能的可能也包含其他檔案。
狀況說明
Microsoft 已確認這是本文 < 適用於 > 一節中所列的 Microsoft 產品中的問題。這個問題,首先已經在 Microsoft SQL Server 2000 服務套件 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 mastergoCREATE DATABASE TestDatabasegoUSE TestDatabasegoCREATE TABLE [dbo].[TestTable] ([col1] [int] NOT NULL ,[col2] [int] NOT NULL ,[col3] AS ([col1] + [col2]) ,[msrepl_tran_version] [uniqueidentifier] NOT NULL) ON [PRIMARY]goALTER TABLE [dbo].[TestTable] WITH NOCHECK ADDCONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED([col1]) ON [PRIMARY]goALTER TABLE [dbo].[TestTable] ADDCONSTRAINT [DF_TestTable_msrepl_tran_vers] DEFAULT (newid()) FOR[msrepl_tran_version]goCREATE UNIQUE INDEX [IX_T1UNIQUE] ON[dbo].[TestTable]([msrepl_tran_version]) ON [PRIMARY]gouse [TestDatabase]goexec sp_replicationdboption @dbname = N'TestDatabase', @optname = N'publish', @value = N'true'goexec 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 = 0exec 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]gocreate procedure [sp_MSins_TestTable] @c1 int,@c2 int,@c3 uniqueidentifier,@c4 intASBEGINif not exists (select * from [TestTable]  where  ( [col1] = @c1 )  or  ( [col4] = @c5 ) )BEGINinsert into [TestTable]( [col1], [col2], [msrepl_tran_version], [col4] )values ( @c1, @c2, @c3, @c4 )ENDENDgoif exists (select * from sysobjects where type = 'P'  and name = 'sp_MSupd_TestTable')  drop proc [sp_MSupd_TestTable]gocreate procedure [sp_MSupd_TestTable]  @c1 int,@c2 int,@c3 uniqueidentifier,@c4 int,@c5 int,@c6 int,@c7 uniqueidentifier,@c8 intasif not exists (select * from [TestTable]  where  ( [col4] = @c9 and @c9 != @c5 ) )beginif @c5 = @c1beginupdate [TestTable] set [col2] = @c6,[msrepl_tran_version] = @c7,[col4] = @c8where [col1] = @c1 and msrepl_tran_version = @c3endelsebeginif not exists (select * from [TestTable]  where  ( [col1] = @c5 ) )beginupdate [TestTable] set [col1] = @c5,[col2] = @c6,[msrepl_tran_version] = @c7,[col4] = @c8where [col1] = @c1 and msrepl_tran_version = @c3endendendgoif exists (select * from sysobjects where type = 'P' and name = 'sp_MSdel_TestTable')  drop proc [sp_MSdel_TestTable]gocreate procedure [sp_MSdel_TestTable] @c1 int,@c2 int,@c3 uniqueidentifier,@c4 intasdelete [TestTable]where [col1] = @c1 and msrepl_tran_version = @c3go
請注意自訂插入預存程序 sp_MSins_TestTable,參考參數,名為 @ c5@ c5 未宣告做為參數對於該程序和自訂更新預存程序 sp_MSupd_TestTable 參考另一個未定義的參數命名 @ c9

警告:本文為自動翻譯

內容

文章識別碼:827175 - 最後檢閱時間:02/27/2014 02:16:28 - 修訂: 3.4

Microsoft SQL Server 2000 Service Pack 3, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, 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
意見反應