Migration

嘗試將登錄名從 SQL Server 2000 導出到 SQL Server 2005 時出錯

  • December 29, 2016

我正在嘗試將登錄從 SQL 2000 中的實例遷移到 SQL 2005 中的目標實例。

我之前使用過 revlogin,如下所述:

https://support.microsoft.com/en-us/kb/246133

(我正在使用文章中解釋的“方法2”)

問題是,在嘗試創建 sp_hexadecimal 儲存過程(由 sp_help_revlogin_2000_to_2005 使用)時,我收到以下錯誤:

USE master 
GO 
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL 
DROP PROCEDURE sp_hexadecimal 
GO 
CREATE PROCEDURE sp_hexadecimal 
@binvalue varbinary(256), 
@hexvalue varchar(256) OUTPUT 
AS 
DECLARE @charvalue varchar(256) 
DECLARE @i int 
DECLARE @length int 
DECLARE @hexstring char(16) 
SELECT @charvalue = '0x' 
SELECT @i = 1 
SELECT @length = DATALENGTH (@binvalue) 
SELECT @hexstring = '0123456789ABCDEF' 
WHILE (@i <= @length) 
BEGIN 
DECLARE @tempint int 
DECLARE @firstint int 
DECLARE @secondint int 
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) 
SELECT @firstint = FLOOR(@tempint/16) 
SELECT @secondint = @tempint - (@firstint*16) 
SELECT @charvalue = @charvalue + 
SUBSTRING(@hexstring, @firstint+1, 1) + 
SUBSTRING(@hexstring, @secondint+1, 1) 
SELECT @i = @i + 1 
END 
SELECT @hexvalue = @charvalue 
GO 


Msg 134, Level 16, State 2, Procedure sp_hexadecimal, Line 26
The variable name '@binvalue' has already been declared. Variable names must be unique within a query batch or stored procedure.

這非常奇怪,因為相同的 SP 在其他情況下也有效。

我傾向於相信這與我正在使用的 SQL 版本有關:

Microsoft SQL Server  2000 - 8.00.2301
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

該腳本適用於:

Microsoft SQL Server  2000 - 8.00.2066 (Intel X86)
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 

有沒有人遇到過這個問題?

有解決方法嗎?

我在網上找到了一些關於這個問題的參考資料,但都沒有定論。

http://www.sqlservercentral.com/Forums/Topic309704-5-1.aspx https://social.msdn.microsoft.com/Forums/en-US/55b9a6c6-2e03-42dd-bcfc-31f487171b73/variable-already-declared-error-when-adding-stored-procedure?forum=sqldatabaseengine

謝謝!

在處理了這個錯誤很多之後,我無法找到讓它工作的方法,因為不再支持 SQL2000 我最終使用了 dbatools(一個很棒的 PowerShell 模組):github.com/sqlcollaborative/dbatools

dbatools 有一個名為 Export-SqlLogin 的函式,它完全符合我的需要:使用 sid、密碼、伺服器角色、預設數據庫等編寫所有登錄腳本。

我強烈建議研究這個 PowerShell 模組。

不是很有用,但我已經在我的 sql server 2000 測試實例上對其進行了測試;版本是:

在此處輸入圖像描述

然後從“Method2”(https://support.microsoft.com/en-us/kb/246133)複製並啟動所有程式碼,一切正常:

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/159257