单个SqlCommand中的多个语句

时间:2010-06-30 13:03:27

标签: c# tsql ado.net

我有一组sql脚本,我使用C#中的SqlCommand对象发送到SQL Server。这些脚本创建存储过程,只要我创建过程,一切正常。如果我的脚本包含通常的“if exists ... drop XYZ; create procedure XYZ ...”块,我会收到一个错误,告诉我,create必须是批处理中的第一个语句。分号和“GO”都不能用作分隔符。

任何提示如何使用单个SqlCommand执行此类脚本?我曾期望能够将属性设置为“批处理”或类似的东西,但我没有找到任何东西。

3 个答案:

答案 0 :(得分:3)

冲突的语句必须由批处理分隔符(默认的GO - 您说不起作用)分隔,或者,如果可能,从程序逻辑的角度以不同的顺序执行。但是,在大多数情况下,无法对报表顺序进行重组,因此您必须采用不同批次的分隔,因此我建议以不同的批次运行它们。

答案 1 :(得分:1)

如果要提交包含批处理的大型sql脚本,则应使用SMO。这使您可以更好地控制脚本执行操作的方式。并且不依赖于自定义sql脚本碎化逻辑(我是否需要解决这个问题?)

http://msdn.microsoft.com/en-us/library/ms212724.aspx

答案 2 :(得分:0)

应该可以正常工作,如http://www.java2s.com/Code/CSharp/Database-ADO.net/ExecutemultipleSQLstatementsusingaSqlCommandobject.htm

中所示

但是您可以使用存储过程来完成此任务,这将使事情变得更容易。