在sql Server 2008上执行整个.sql文件
我正在尝试从vb.net应用程序在SQL Server上执行整个SQL命令文件。问题是,如果SQL文件包含任何在sql Server 2008上执行整个.sql文件,sql,sql-server,vb.net,sql-server-2008,Sql,Sql Server,Vb.net,Sql Server 2008,我正在尝试从vb.net应用程序在SQL Server上执行整个SQL命令文件。问题是,如果SQL文件包含任何CREATE PROCEDURE命令,则会出现以下错误: 发生严重错误。'“创建/更改过程”必须是 查询批处理中的第一条语句。关键字附近的语法不正确 “PROC” 如何通过包含CREATE PROCEDURE命令的SqlConnection执行sql文件?问题是,每个CREATE PROCEDURE都必须是批处理中的第一条语句(错误消息清楚地说明了这一点) 如果要在sql Server
CREATE PROCEDURE
命令,则会出现以下错误:
发生严重错误。'“创建/更改过程”必须是
查询批处理中的第一条语句。关键字附近的语法不正确
“PROC”
如何通过包含
CREATE PROCEDURE
命令的SqlConnection
执行sql文件?问题是,每个CREATE PROCEDURE
都必须是批处理中的第一条语句(错误消息清楚地说明了这一点)
如果要在sql Server Management Studio中执行.sql
,可以使用GO
作为分隔符:
....
GO
CREATE PROCEDURE dbo.SomethingOrAnother......
但是这个GO
是一个特定于SSMS的分隔符,而不是一般的SQL语句
在VB.NET中对sql Server执行完整的.sql
脚本文件确实没有“神奇”的方法-我通常执行以下步骤:
- 将整个
文件读入字符串.sql
- 在
分隔符上将包含整个脚本的字符串拆分为单独的子字符串GO
- 针对SQL Server分别执行此拆分产生的每个片段
这样,任何
创建过程….
都将是单独批处理中的第一条语句,然后您的脚本应该可以在VB.NET中正常工作。您可以在脚本中保留GO
分隔符,但您应该使用在
C:\Program Files\Microsoft SQL Server\110\SDK\Assembly
(或适用于您的版本的相应目录)
您需要有对以下程序集的引用(和导入)
- Microsoft.SqlServer.Smo
- Microsoft.SqlServer.ConnectionInfo
- Microsoft.SqlServer.Management.Sdk.Sfc
GO
。用“GO”分隔命令会导致以下错误:发生严重错误。“GO”附近的语法不正确。@M.Ali:如果您在SQL Server Management Studio中执行脚本,这会起作用-但是在.NET应用程序中,GO
不会有帮助。…@M.Ali:不,不太可能。我通常做的是在ssm中使用.sql
和GO
,如果我想从C#执行这个.sql
,我需要在GO
分隔符上拆分它,并针对sql Server分别执行每个片段
....
GO
CREATE PROCEDURE dbo.SomethingOrAnother......
Dim cmd = File.ReadAllText("d:\temp\create.sql")
Using con = new SqlConnection("....")
Dim svrConnection = new ServerConnection(con)
Dim server = new Server(svrConnection)
Dim col = new StringCollection()
col.Add(cmd)
server.ConnectionContext.ExecuteNonQuery(col)
End Using