使用C#运行带有关键字GO的.sql语句?

使用C#运行带有关键字GO的.sql语句?,c#,sql,sql-server,C#,Sql,Sql Server,我有以下几点 USE [TESTDB] CREATE FUNCTION dbo.Function1 (@input VARCHAR(250)) RETURNS VARCHAR(250) AS BEGIN --do work here END SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE FUNCTION dbo.Function2 (@input VARCHAR(250)) RETURNS VARCHAR(250) AS

我有以下几点

USE [TESTDB]
CREATE FUNCTION dbo.Function1 (@input VARCHAR(250)) 
RETURNS VARCHAR(250) 
AS 
BEGIN   
 --do work here
END

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON

CREATE FUNCTION dbo.Function2 (@input VARCHAR(250)) 
RETURNS VARCHAR(250) 
AS BEGIN   
 --do work here
END
我尝试使用C#中的SQL连接运行此操作,但出现错误:

CREATE FUNCTION“必须是查询批处理中的第一条语句。 必须声明标量变量“@input”


如何在C#中运行它?

GO
不是SQL概念;它实际上不存在于语法中


SSMS通过解析SQL,识别
GO
(和
GO{integer}
)用法,并将您的命令拆分为多个部分,从而允许使用它;然后,它作为独立命令一个接一个地分别发布这些部分。执行此操作的完全是SSMS,而不是SQL Server驱动程序或SQL Server数据库/服务器
SqlClient
(ADO.NET提供程序)没有内置此功能来模拟SSM,因此:您需要在自己的代码中实现它。或者更简单:首先将代码作为单独的命令编写。

GO
不是关键字。它是一个批处理分隔符,
SqlCommand
无法识别它。您需要做的是在GO处拆分文本(尽管比这要复杂一点),然后使用command对象按顺序执行每个部分。一个与SSMS在运行文件之前如何将文件拆分为批非常接近的正则表达式模式是
(^GO\r?\n | \r?\nGO\r?\n | \r?\nGO$)
所以基本上我可以用不同的sql命令一次运行一个?