如何继续执行SQL脚本中的错误以执行批处理中的其他语句?

问题描述:

我正在使用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. 

此消息脚本似乎停止后它在此之后无法创建其他表。是否可以在脚本通过预期错误后继续执行脚本?

好于继续过去的错误是测试脚本中的失败情况,例如,如果存在表,则只删除表。

相反的:

DROP TABLE [dbo].[webpages_UsersInRoles]; 

尝试:

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

(从https://*.com/a/7887033/163495

有几个选择这里,其真正的你觉得什么事是适合你的脚本。

  • 你可以把语句放在try/catch块中,只是吞下错误。
  • 您可以执行SMO在生成T-SQL并在IF语句中包装您的语句以确保所讨论的对象存在时所做的事情。
  • 你应该能够用GO语句分开你的'章节',因为它们是作为单个批次发送到数据库的。