2012-10-24 70 views
1

我學習SQL和我有一些問題,呼籲從一個新的/不同的查詢的存儲過程。SQL Server存儲過程,EXEC從另一個查詢

我已經構建了一個installDB.sql文件,其中創建了一些表格並且額外填充了這些數據。

此外,我使用存儲的過程爲好,添加一些功能。

例子:

CREATE PROCEDURE Add_Book 
    @User CHAR(50), 
    @Book CHAR(50) 
    AS 
INSERT INTO Relationtable(book_id, user_id, current_dato) 
    VALUES(
     (SELECT book_id FROM Books WHERE book_title = @Book), 
     (SELECT user_id FROM Users WHERE user_name = @User), 
     GETDATE() 
    ) 

在此查詢(標籤),我可以exec該程序(沒有問題):

exec Add_Book myUser, myBook 

但是,如果我在一個新的查詢(標籤)試試這個命令,它不起作用。

我希望installDB能夠構建我的所有功能,並且能夠稍後從其他查詢中調用它們。

這可能嗎?

+0

你得到的錯誤是什麼? –

+0

消息2812,級別16,狀態62,行2 未能找到存儲過程「Add_Book」 ......我嘗試在一個新的查詢使用此代碼。 '使用Libary exec Add_Book myUser,myBook'。 – user1771692

+0

上面提到的Command只是在'installDB.sql'裏面工作的。其他人沒有找到'Add-Book'功能 – user1771692

回答

0

我們在產品中使用這種方法來建立和維護數據庫。我們有許多獨立的SQL腳本,可以安裝所有必需的表,tempdb表,視圖,函數,存儲過程等。稍後,當人們運行執行這些存儲過程的代碼時,proc可以像正常一樣執行。

如果此安裝腳本在事務中運行並以ROLLBACK結尾或遇到錯誤,則安裝到該點的所有內容都將失敗。同樣,如果安裝腳本以BEGIN TRAN開頭,並且沒有COMMIT,那麼procs還不存在。

另一種可能性是安裝腳本針對不同的數據庫或不同於您預期的服務器運行。運行腳本後,您應該能夠在Microsoft SQL Management Studio查詢窗口中執行它。

+0

感謝您的回答。作爲初學者,這聽起來有點複雜。因此,在這種情況下,使用'exec Add_Book myUser,myBook'的簡單方法將不起作用?目標是製作2個腳本,一個可以添加,另一個可以刪除。這可以像我上面所做的那樣輕鬆完成。缺點:用戶可以看到腳本代碼。因此,我決定將所有函數(存儲過程)寫入'installDB.sql',並且只傳遞exec-command。 – user1771692

+0

您是否已將'CREATE PROCEDURE'和'DROP PROCEDURE'放在同一個installDB.sql腳本中? –

相關問題