1

VisualStudio2012サーバーエクスプローラーの[新しいクエリ]ウィンドウを使用しています。これが私が実行しようとしているスクリプトです:

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.

このメッセージの後、スクリプトは停止しているように見え、この後、他のテーブルの作成に失敗します。予期されたエラーを通過した後、スクリプトを続行させることができますか?

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 に答える