1

我在 Visual Studio 2012 Server Explorer 中使用 New Query 窗口。这是我要执行的脚本:

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)
);

目前没有 pages_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.

在此消息之后,脚本似乎停止并且在此之后无法创建其他表。在脚本通过预期的错误后,我可以让脚本继续吗?

4

2 回答 2

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

于 2013-02-27T08:46:34.650 回答
1

这里有几个选项,这实际上取决于您认为适合您的脚本的内容。

  • 您可以将语句放在 try/catch 块中,然后吞下错误。
  • 您可以执行 SMO 在生成 T-SQL 时所做的事情,并将您的语句包装在 IF 语句中,以确保有问题的对象存在。
  • 您应该能够使用 GO 语句分离出您的“部分”,因为这些是作为单独的批次发送到数据库的。
于 2013-02-27T08:49:21.520 回答