2012-01-06 140 views
3

我有一個SQL腳本,用它們的鍵和約束設置兩個數據庫表沒有任何問題。我將不包括整個代碼,但「骨架」它看起來像這樣:在一個腳本中創建SQL Server表和存儲過程?

BEGIN 
CREATE TABLE [table] (

) 

CREATE TABLE [table2] (

) 

ALTER TABLE table... 

ALTER TABLE table2.... 


END 

我堅持努力的存儲過程,雖然到這個劇本,我非常希望包括此範圍內的所有相同腳本。有人能告訴我如何將以下存儲過程包含到上面的腳本中嗎?

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

我試圖把它推向腳本的結尾,也試圖與不BEGIN,END和GO標籤,但我不斷收到寫着「近程序不正確的語法」錯誤。

+0

你想創建一個SQL腳本?我很困惑於「模式」這個詞。 – 2012-01-06 09:27:14

+0

對不起,也許這就是我的意思! SQL新手 – DevDave 2012-01-06 09:29:04

+0

如果在將'GO'添加到腳本時出現錯誤,則必須有另一個問題。我知道你說劇本很長,但也許你可以發表引起問題的部分?另外,如果您不確定它,請閱讀「GO」文檔:http://msdn.microsoft.com/en-us/library/ms188037.aspx – Tony 2012-01-06 09:37:31

回答

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 2012-01-06 09:33:14

+0

這是爲sybase ase,mysql,sql server,什麼? – 2012-01-06 09:43:32

+0

我正在使用sql server – DevDave 2012-01-06 09:47:07

3

使用BEGIN END相反的,把你所有的之類的語句創建,更改之間GO。另外我想告訴你,把GO放在你的腳本中會創建塊,所以如果你在一個塊中創建了一些局部變量,那麼在另一個塊中不能訪問它。

CREATE Table Table1(
    --Your Code 
) 

GO 

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

GO 

--Continue your script 

希望這會有所幫助。

+0

您的意思是在每個代碼塊之後放置GO。這樣做後,我得到了以下錯誤:關鍵字'CREATE'附近的語法不正確。 關鍵字'ALTER'附近的語法不正確。 'GO'附近語法不正確。 'GO'附近語法不正確。 'CREATE/ALTER PROCEDURE'必須是查詢批處理中的第一條語句。 – DevDave 2012-01-06 09:36:40

+0

如果您可以發佈您的實際腳本,可能會很容易,可能是初始代碼塊 – 2012-01-06 09:41:35

相關問題