2012-01-06 15 views
3

私は、問題のないキーと制約を持つ2つのデータベーステーブルを設定しているSQLスクリプトを持っています。私は、全体のコードは含まれませんが、それの「スケルトン」は次のようになります。SQL Serverのテーブルとストアドプロシージャを1つのスクリプトで作成しますか?

BEGIN 
CREATE TABLE [table] (

) 

CREATE TABLE [table2] (

) 

ALTER TABLE table... 

ALTER TABLE table2.... 


END 

Iは、理想的には、私はすべて同じ以内にこれを含めたい、しかし、このスクリプトにストアドプロシージャを追加しようとして立ち往生していますスクリプト。誰かが上記のスクリプトに以下のストアドプロシージャを含める方法を教えてもらえますか?

CREATE PROCEDURE Test 
    @x int 
AS 
BEGIN 
    SELECT COUNT(*) 
    FROM table 
END 
GO 

私は、スクリプトの終わりに向かって、それを入れて試してみましたし、また、BEGIN ENDとタグをGOとしてなくてみましたが、私は「PROCEDURE近くに正しくない構文」というエラーを取得維持しています。

+0

SQLスクリプトを作成しようとしていますか?私は "スキーマ"の単語と混同しています。 –

+0

はい申し訳ありませんが多分それは私が意味したものです!新しいSQLの場合 – DevDave

+0

スクリプトに 'GO 'を追加する際にエラーが発生した場合は、別の問題があるはずです。スクリプトが長いと言ったのは知っていますが、問題の原因となったセクションを投稿する可能性はありますか?また、あなたがそれがわからない場合は、 'GO'のドキュメントを読んでください:http://msdn.microsoft.com/en-us/library/ms188037.aspx – Tony

答えて

5

はこのようにそれを試してみてください。

USE BDNAME 
GO 

BEGIN 
CREATE TABLE [table] (

) 

CREATE TABLE [table2] (

) 

ALTER TABLE table... 

ALTER TABLE table2.... 


END 


USE BDNAME 
GO 

CREATE PROCEDURE Test 
    @x int 
AS 
BEGIN 
    SELECT COUNT(*) 
    FROM table 
END 

GO 
+0

あなたはテーブル作成の最後にGOをしたのですか?ストアドプロシージャの前に?これを試してみて、 '間違った構文をGOの近くに' – DevDave

+0

これはsybase ase、mysql、sql serverのためのものですか? –

+0

SQLサーバー – DevDave

3

の代わりにENDを使用してBEGIN、アルターの作成などのすべてのステートメントの間でGOを置きます。また、GOを配置するとスクリプト内にブロックが作成されるので、1つのブロックにローカル変数を作成すると別のブロックにアクセスすることはできません。

CREATE Table Table1(
    --Your Code 
) 

GO 

CREATE PROCEDURE Test 
     @x int 
AS 
BEGIN 
    SELECT COUNT(*) 
    FROM Table1 
END 

GO 

--Continue your script 

希望します。

+0

あなたは各コードブロックの後にGO GOを意味しますか?それをした後、私は次のエラーが表示されます:キーワード 'CREATE'の近くに構文が正しくありません。 キーワード「ALTER」の近くの構文が正しくありません。 'GO'付近の構文が正しくありません。 'GO'付近の構文が正しくありません。 'CREATE/ALTER PROCEDURE'はクエリバッチの最初の文でなければなりません。 – DevDave

+0

あなたが実際のスクリプトを投稿することができれば簡単だろう、初期コードブロックかもしれない –

関連する問題