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

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