嘗試將登錄名從 SQL Server 2000 導出到 SQL Server 2005 時出錯
我正在嘗試將登錄從 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)複製並啟動所有程式碼,一切正常: