如何在Sql Server 2005+中执行嵌套脚本

时间:2009-02-20 11:04:36

标签: sql-server

是否有任何sql忍者知道如何从另一个脚本中执行脚本(.sql)?专门针对Sql Server 2005+平台。例如。 psudeo代码如下:

ScriptA内容

RESTORE DATABASE [MyDbName]
    FROM  
        DISK = N'path' WITH  FILE = 1
.......
GO
Exec c:\scripts\ScriptB.sql

ScriptB内容

USE [MyDbName]
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTableName]') AND type in (N'U'))
CREATE TABLE [dbo].[MyTableName]
........
GO

4 个答案:

答案 0 :(得分:3)

您可以从SSMS打开SQLCMD模式或在SQLCMD.exe中运行脚本。 SQLCMD支持脚本变量和脚本引用。

---script1-----
create table ....
:r path/to/another/script (which can reference others)
---------------

希望这会有所帮助

答案 1 :(得分:0)

以下文章提供了如何实现此目的的示例。

http://www.sqlservercentral.com/articles/Administering/scriptrunner/292/

这是一个免费工具,可以运行多个脚本,但不能在现有脚本中运行。

http://www.xsqlsoftware.com/Product/ProductDetails.aspx?ProdID=ScriptExecutor

以下是通过使用xp_cmdshell存储过程调用isql实用程序从另一个脚本中执行脚本的示例。

http://www.sqlservercentral.com/articles/Administering/scriptscheduling/450/

如果你需要进一步的帮助,应该是你需要开始的,但请给我留言。

干杯,约翰

答案 2 :(得分:0)

核心MS SQL不会这样做,但有些工具具有一些宏功能(即完成客户端站点)。

SQLCMD支持“:r”导入另一个文件。

答案 3 :(得分:0)

据我所知,您不必将两个脚本组合在一起。你可以只执行第一个,然后执行另一个。

您可以通过创建加载.sql文件的vbscript然后使用ADODB.Connection来执行这两个脚本来完成此操作。

这个vbscript应该这样做:

Set con = CreateObject("ADODB.Connection")
con.ConnectionString = "*** Database connection string here ***"
con.Open 

Set fso = CreateObject("Scripting.FileSystemObject")

Set sqlFile = fso.OpenTextFile("scriptA.sql", 1)
con.Execute sqlFile.ReadAll
sqlFile.Close

Set sqlFile = fso.OpenTextFile("scriptB.sql", 1)
con.Execute sqlFile.ReadAll
sqlFile.Close

Set fso = Nothing 
Set con = Nothing