2013-02-27 70 views
1

我正在使用Visual Studio 2012 Server Explorer中的「新建查詢」窗口。這裏 是我試圖執行腳本:如何繼續執行SQL腳本中的錯誤以執行批處理中的其他語句?

ALTER TABLE [dbo].[webpages_UsersInRoles] DROP CONSTRAINT fk_UserId; 
ALTER TABLE [dbo].[webpages_UsersInRoles] DROP CONSTRAINT fk_RoleId; 

DROP TABLE [dbo].[ExtraUserInformation]; 
DROP TABLE [dbo].[UserProfile]; 
DROP TABLE [dbo].[webpages_Membership]; 
DROP TABLE [dbo].[webpages_OAuthMembership]; 
DROP TABLE [dbo].[webpages_Roles]; 
DROP TABLE [dbo].[webpages_UsersInRoles]; 

CREATE TABLE [dbo].[ExtraUserInformation] (
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [UserId] INT   NOT NULL, 
    [FullName] NVARCHAR (MAX) NULL, 
    [Link]  NVARCHAR (MAX) NULL, 
    [Verified] BIT   NULL, 
    CONSTRAINT [PK_dbo.ExtraUserInformation] PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

目前還沒有webpages_UsersInRoles表,它給了我一個錯誤 消息說:

Msg 4902, Level 16, State 1, Line 5 
Cannot find the object "dbo.webpages_UsersInRoles" because it does not exist or you do not have permissions. 

此消息腳本似乎停止後它在此之後無法創建其他表。是否可以在腳本通過預期錯誤後繼續執行腳本?

回答

1

好於繼續過去的錯誤是測試腳本中的失敗情況,例如,如果存在表,則只刪除表。

相反的:

DROP TABLE [dbo].[webpages_UsersInRoles]; 

嘗試:

IF OBJECT_ID('dbo.webpages_UsersInRoles', 'U') IS NOT NULL 
    DROP TABLE dbo.webpages_UsersInRoles 

(從https://stackoverflow.com/a/7887033/163495

1

有幾個選擇這裏,其真正的你覺得什麼事是適合你的腳本。

  • 你可以把語句放在try/catch塊中,只是吞下錯誤。
  • 您可以執行SMO在生成T-SQL並在IF語句中包裝您的語句以確保所討論的對象存在時所做的事情。
  • 你應該能夠用GO語句分開你的'章節',因爲它們是作爲單個批次發送到數據庫的。