SQL Server存储过程,exec来自另一个查询

时间:2012-10-24 15:54:04

标签: sql sql-server-2008 stored-procedures

我正在学习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能够构建我的所有功能,并且可以在以后通过其他查询调用它们。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我们使用此方法在我们的产品中设置和维护数据库。我们有许多单独的SQL脚本来安装所有必需的表,tempdb表,视图,函数,存储过程等。后来,当人们运行执行这些存储过程的代码时,procs可以像平常一样执行。

如果此安装脚本在事务中运行并以ROLLBACK结束或遇到错误,则安装到该点的所有内容都将失败。同样,如果安装脚本以BEGIN TRAN开头,并且没有COMMIT,那么procs还不存在。

另一种可能性是安装脚本针对的是与您预期不同的数据库或服务器。运行脚本后,您应该能够在Microsoft SQL Management Studio查询窗口中执行它。