在一个脚本中创建 SQL Server 表和存储过程?

Posted

技术标签:

【中文标题】在一个脚本中创建 SQL Server 表和存储过程?【英文标题】:Create SQL Server tables and stored procedures in one script? 【发布时间】:2012-01-06 09:23:02 【问题描述】:

我有一个 SQL 脚本,它使用它们的键和约束设置两个数据库表,没有任何问题。我不会包含整个代码,但它的“骨架”看起来像这样:

 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 标记,但我不断收到错误消息,提示“PROCEDURE 附近的语法不正确”。

【问题讨论】:

您是否正在尝试创建 sql 脚本?我对“模式”这个词感到困惑。 是的,对不起,也许这就是我的意思!我是 SQL 新手 如果您在将GO 添加到您的脚本时出现错误,则肯定是另一个问题。我知道您说脚本很长,但也许您可以发布导致问题的部分?另外,如果您不确定,请阅读GO 上的文档:msdn.microsoft.com/en-us/library/ms188037.aspx 【参考方案1】:

试试这样:

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

【讨论】:

你的意思是把 GO 放在表创建的最后和存储过程之前?试一试,发现“GO 附近的语法不正确” 这是用于sybase ase、mysql、sql server,什么? 抱歉,问题出在脚本的调用方式上,感谢您的帮助【参考方案2】:

不要使用 BEGIN END,而是将 GO 放在所有语句之间,例如 Create、Alter。另外我想告诉你,放 GO 会在你的脚本中创建块,所以如果你在一个块中创建一些局部变量,它在另一个块中是无法访问的。

 CREATE Table Table1(
     --Your Code
 )

 GO

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

 GO

 --Continue your script

希望这会有所帮助。

【讨论】:

你的意思是在每个代码块后面加上GO。这样做之后,我得到了以下错误:关键字'CREATE'附近的语法不正确。关键字“ALTER”附近的语法不正确。 'GO' 附近的语法不正确。 'GO' 附近的语法不正确。 “CREATE/ALTER PROCEDURE”必须是查询批处理中的第一条语句。 如果您可以发布您的实际脚本会很容易,可能是初始代码块

以上是关于在一个脚本中创建 SQL Server 表和存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中创建一个接受一列数据的函数?

如何在插入时在 SQL Server 中创建触发器?

SQL Server:尝试在存储过程中创建视图

如何在sql server中创建一个存储过程中的varchar型的输入参数默认值为空

怎样在Sql server中创建,执行和删除存储过程

用于在存储库测试中创建相同表的 Sql 脚本