2009-03-23 5 views
1

DBに既に実装されている既存の部分が潜在的に存在する可能性のある、または存在しない可能性のあるさまざまなサーバーに、 。この不測の事態を回避するために、私はセットアップ以下のテストがあります。SQL Server 2005でIF NOT EXISTSステートメント内でDDLが正しく実行されない

USE [testDB] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[wcSites]') AND type in (N'U')) 
begin 
    CREATE TABLE [dbo].[wcSites](
     [id] [int] IDENTITY(1,1) NOT NULL, 
     [name] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
     [siteCSS] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
     [masterTemplate] [int] NULL, 
     [errorPage] [int] NULL, 
     [homePage] [int] NULL, 
     [addressProduction] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
     [addressTest] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
     [routeHandler] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
     [publish] [bit] NOT NULL CONSTRAINT [DF_wcSites_publish] DEFAULT ((0)), 
     [publicAccess] [bit] NOT NULL CONSTRAINT [DF_wcSites_publicAccess] DEFAULT ((1)), 
     [siteAccessPermission] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 
     [contentOwner] [int] NULL, 
     [navStyle] [int] NULL, 
     [incScripts] [int] NULL, 
     [boxW] [int] NULL, 
     [boxH] [int] NULL, 
     [columns] [int] NULL, 
     [rows] [int] NULL, 
    CONSTRAINT [PK_wcSites] PRIMARY KEY CLUSTERED 
    (
     [id] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], 
    CONSTRAINT [IX_wcSites_Unique_Address] UNIQUE NONCLUSTERED 
    (
     [addressProduction] ASC, 
     [addressTest] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY] 

    GO 
    SET ANSI_PADDING OFF 
    GO 
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Ensure unique addresses in the addressProduction, addressTest fields' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'wcSites', @level2type=N'CONSTRAINT',@level2name=N'IX_wcSites_Unique_Address' 
end 

をそして、最終的な結果は常にある:

Msg 102, Level 15, State 1, Line 32 
Incorrect syntax near 'PRIMARY'. 
Msg 102, Level 15, State 1, Line 2 
Incorrect syntax near 'end'. 

私はIFステートメントをテストする場合、それは正常に動作します:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[wcSites]') AND type in (N'U')) 
begin 
    PRINT 'Table does not exist' 
end 

同様に私はCREATE TABLEスクリプトをテストします。しかし、私はCREATE TABLEスクリプトをbegin..endブロックの中に置くと毎回失敗します。そして、私は全面的に問題を抱えています。この方法を使用するほとんどすべてのテーブルが失敗します。

答えて

4

begin..endブロック内の 'go'ステートメントを削除してみてください。

+0

いいえ - ブロック内にGO文を置くことはできません –

0

私はSQL Serverの構文では少しばかりですが、GO文はブロックを実行しようとしませんか? goをセミコロンに置き換えるとどうなりますか?

また、Ansi_paddingが外に出ている間にIfブロック内にあるAnsi_paddingをオフに設定すると、私には奇妙に見えますが、正しいのですか?

関連する問題