2016-08-31 28 views
0

SQL Developer(SqlDev)(Oracleツール)ではほとんどの場合 ';'を使用します。バッチの終わりを示す。代わりに ';' SQL Server Management Studio(SMSS)でバッチの終了を示す方法

また、 ';'その中にたくさんのバッチがある大きなスクリプトがあるとき。たとえば、最初のバッチがテーブルを作成し、2番目のテーブルがそのテーブルにデータを挿入し、3番目のテーブルが作成されたテーブルと別のテーブルなどと結合します。

SqlDevでは、スクリプトそれ)うまく動作します。しかし、正確なスクリプトをSQL Server Management Studio(SMSS)にコピーして実行したときに、作成されたテーブルが結合されている第3バッチのテーブルが存在しないというエラーが発生しました。

スクリプトを実行しなくても、SMSをSMSで実行させるにはどうすればよいですか?

答えて

0

SQL Server Management Studio(SMSS)では、「;」ではなく「GO」を使用する必要があることがあります。

';' ';'の使用と比較してSQL Server Management Studio(SSMS)では動作が異なります。たとえば、SQl開発者(SQLDev)(Oracleツール)にあります。

SQLDevでは ';'バッチインジケータの終わりとして機能し、SSMSはDLLを使用しているときにそれを認識しません。代わりにSMSSは最初にスクリプト全体を見て、スマートな方法で実行します。つまり、すべてが並行して実行されます。一部のバッチは他のバッチに依存しますが、適切に実行されず、スクリプトが失敗します。

私の状況では、DBMSに並列の代わりに第1、第2、第3のsequantialを実行するように 'GO'を使わなければならないということを意味しました。私はすべての ';'スクリプトでGOを実行してください(実際にはバッチがたくさんあります)。私はそれがこのようにするのが完全に正しいとは確信していませんが、少なくともそれは働いていました。 :)

も参照してください。

What is the use of GO in SQL Server Management Studio & Transact SQL?

When do I need to use Begin/End Blocks and the Go keyword in SQL Server?

+4

スクリプトを順番に実行する場合と並行して実行する場合は、スコープとコンパイルを行う必要があります。 OPsスクリプトは、スクリプトが開始する前にスクリプト内で参照されているテーブルが存在しないため、コンパイル時に失敗しています。 GO文を使用すると、複数のバッチのスクリプト内の各バッチのスコープが区切られます。それぞれのバッチは、先行するすべてのバッチが完了した後にのみコンパイルされます。逆に、 ';'シンボルはバッチ内の個々のステートメント間の区切り文字にすぎません。 – MatBailie

1

SQL Serverで使用すると、文のバッチまたはブロックを分割するために 'GO' を使用することができます。 以下のようになります。

ALTER TABLE [dbo].[Security] ADD CONSTRAINT [DF_Security_ImportSettings] DEFAULT ((11111011111111111.)) FOR [ImportSettings] 
GO 

ALTER TABLE [dbo].[Security] ADD CONSTRAINT [DF_Security_PricingType] DEFAULT ((-1)) FOR [PricingType] 
GO 

ALTER TABLE [dbo].[Security] ADD CONSTRAINT [DF_Security_AutoUpdateCustomPricing] DEFAULT ((1)) FOR [AutoUpdateCustomPricing] 
GO 
1

Goあなたは...

例を探しているキーワード..です

insert into t1 
select 1 
go 

alter table t1 
add abc int 

これはまた、SSMSで設定可能です(私もテストしていません);または他の単語..

enter image description here

関連する問題