我正在学习SQL,并且在从新的/不同的查询中调用存储过程时遇到了一些问题。
我已经构建了一个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)
我们使用此方法在我们的产品中设置和维护数据库。我们有许多单独的SQL脚本来安装所有必需的表,tempdb表,视图,函数,存储过程等。后来,当人们运行执行这些存储过程的代码时,procs可以像平常一样执行。
如果此安装脚本在事务中运行并以ROLLBACK
结束或遇到错误,则安装到该点的所有内容都将失败。同样,如果安装脚本以BEGIN TRAN
开头,并且没有COMMIT
,那么procs还不存在。
另一种可能性是安装脚本针对的是与您预期不同的数据库或服务器。运行脚本后,您应该能够在Microsoft SQL Management Studio查询窗口中执行它。