如何继续执行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
答
有几个选择这里,其真正的你觉得什么事是适合你的脚本。
- 你可以把语句放在try/catch块中,只是吞下错误。
- 您可以执行SMO在生成T-SQL并在IF语句中包装您的语句以确保所讨论的对象存在时所做的事情。
- 你应该能够用GO语句分开你的'章节',因为它们是作为单个批次发送到数据库的。