請教大家
這是透過下列指令來做SQL資料庫修復的語法
declare @dbname Varchar(255)
set @dbname='EIP'
exec sp_dboption @dbname,'single user','true'
dbcc checktable('Service_Account',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('Service_Account',REPAIR_REBUILD)
------把’ 需要修復的資料表的名稱’更改為執行DBCC CHECKDB時報錯的資料表的名稱
exec sp_dboption @dbname,'single user','false'
但是因為是在sql2012上來執行,它不支援sp_dboption程序,於是我把它改成
ALTER DATABASE @dbname,'single user','true'
但是卻會出現下列的訊息
訊息 102,層級 15,狀態 1,行 3
接近 '@dbname' 之處的語法不正確
是否可以修正此問題呢?
煩請大家指點
感謝
<pre class="c" name="code">
Set QUOTED_IDENTIFIER OFF
declare @dbname Varchar(255)
DECLARE @strSQL varchar(255)
set @dbname='EIP'
exec sp_dboption @dbname,'single user','true'
dbcc checktable('Service_Account',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('Service_Account',REPAIR_REBUILD)
SET @strSQL = "ALTER DATABASE " + @dbname + ",'single user','true'"
EXEC (@strSQL)
wiselou大的意思是以 8,9 兩行取代 第5行吧 ?! 如下:
Set QUOTED_IDENTIFIER OFF
declare @dbname Varchar(255)
DECLARE @strSQL varchar(255)
set @dbname='EIP'
-- exec sp_dboption @dbname,'single user','true'
SET @strSQL = "ALTER DATABASE " + @dbname + ",'single user','true'"
EXEC (@strSQL)
dbcc checktable('Service_Account',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('Service_Account',REPAIR_REBUILD)
我手動執行下列指令可以
ALTER DATABASE EIP
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
但是使用前輩的範例執行後會出現下列訊息
-->訊息 102,層級 15,狀態 1,行 1
接近 ',' 之處的語法不正確。
(在執行@strSQL的時候)
煩請大家指點
感謝
Script 第6行 修正如粗體字所示, 應就OK
Set QUOTED_IDENTIFIER OFF
declare @dbname Varchar(255)
DECLARE @strSQL varchar(255)
set @dbname='EIP'
-- exec sp_dboption @dbname,'single user','true'
SET @strSQL = "ALTER DATABASE " + @dbname + " set single_user"
EXEC (@strSQL)
dbcc checktable('Service_Account',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('Service_Account',REPAIR_REBUILD)