2012-10-24 33 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脚本中? –

相关问题