2010-08-03 75 views
0

我必须处理一个包含大量sql语句的文件。问题是sql语句包含参数。带参数的ExecuteNonQuery

E.g.该文件看起来像这样

declare @var1 as nvarchar; 
set @var1 = 'value'; 
insert into table (field1, field2, field3) 
    values ('value1', 'value2', @var1); 

重复下一组三行。

我一直希望能够将文件解析成三行代码块并使用ExecuteNonQuery将它们关闭,但问题在于sql语句包含一个参数。

注意:在我的示例中,@ var1是脚本中的值,用于获取服务器变量。

回答

0

听起来像一个SQL脚本文件给我。

难道你不能只使用ISQL或SQLCmd?

[附录]

对不起,我假定一个MSSQL后端,因为你称为的ExecuteNonQuery。

如果这些语句是一致的,则可以将值内联。如果它们在数据类型上有所不同,则需要使用声明的类型来读取和插入该值(即,不要使用数字的引号)。如果数据类型不同,则需要使用声明的类型来读取和插入值(即,不要使用引号)。

从根本上来说,这确实是一个糟糕的设计和/或组织问题。

+0

该脚本针对MySQL数据库运行。 MySQL有一个命令行工具来导入脚本文件。但是在程序中执行它的原因是我们无法访问shell,并且通过MySQL UI Tools运行该文件导致它冻结。该文件超过8GB。 – 2010-08-03 16:23:59

0

正常情况下,当您运行现有的SQL脚本时,您将分开GO并执行那些大块。我还没有试过用DECLARE声明来做这件事,但是你是否试图按照原样执行脚本 - 即发布的块?

+0

我试着运行脚本并收到以下错误消息:“参数'@ var1'必须被定义。” – 2010-08-03 16:20:38