我必须处理包含大量sql语句的文件。问题是sql语句包含参数。
E.g。该文件看起来像这样
declare @var1 as nvarchar;
set @var1 = 'value';
insert into table (field1, field2, field3)
values ('value1', 'value2', @var1);
用下一组三行重复。
我希望我能够将文件解析为三个行块并使用ExecuteNonQuery将其解除,但问题是sql语句包含一个参数。
注意:在我的示例中,@ var1是脚本中的值,它接收服务器变量。
答案 0 :(得分:0)
听起来像是一个SQL脚本文件。
你不能只使用ISQL或SQLCmd吗?
[附录]
抱歉,我提到了一个MSSQL后端,因为你提到了ExecuteNonQuery。
如果这些陈述是一致的,您可以内联该值。
* read and ignore first line.
* read 2nd line and strip out value between quotes.
* read 3rd line, replace the @x string with the value from line 2.
* execute modified 3rd line.
* repeat
如果数据类型不同,则需要使用声明的类型来读取和插入值(即不要使用数字引号)。
从根本上说,这确实是一个糟糕的设计和/或组织问题。
答案 1 :(得分:0)
通常,当您运行现有SQL脚本时,您将在GO
上拆分并执行这些大块。我没有尝试使用DECLARE
语句执行此操作,您是否尝试按原样执行脚本 - 即您发布的块?