在一个脚本中创建 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 中创建一个接受一列数据的函数?