iT邦幫忙

0

語法應用的問題

  • 分享至 

  • xImage

請教大家
這是透過下列指令來做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' 之處的語法不正確

是否可以修正此問題呢?
煩請大家指點
感謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

4
外獅佬
iT邦大師 1 級 ‧ 2014-01-15 20:56:24
最佳解答
<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)
看更多先前的回應...收起先前的回應...
外獅佬 iT邦大師 1 級 ‧ 2014-01-15 20:57:34 檢舉

務必要執行
Set QUOTED_IDENTIFIER OFF
這樣才能使用雙引號

ektrontek iT邦研究生 1 級 ‧ 2014-01-16 09:46:39 檢舉

但是一樣會出現下列的訊息
-->找不到預存程序 'sp_dboption'

感謝

go777 iT邦研究生 1 級 ‧ 2014-01-16 12:08:45 檢舉

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)

ektrontek iT邦研究生 1 級 ‧ 2014-01-17 08:58:13 檢舉

我手動執行下列指令可以
ALTER DATABASE EIP
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE

但是使用前輩的範例執行後會出現下列訊息

-->訊息 102,層級 15,狀態 1,行 1
接近 ',' 之處的語法不正確。
(在執行@strSQL的時候)

煩請大家指點
感謝

go777 iT邦研究生 1 級 ‧ 2014-01-17 16:49:41 檢舉

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)

我要發表回答

立即登入回答