在DELPHI中运行SQL脚本,为什么这几种都无法实现?(300分)

  • 主题发起人 主题发起人 芭芭拉
  • 开始时间 开始时间

芭芭拉

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是SQL任务自动产生的SQL脚本,我要将此脚本在DELPHI中运行,目的是为了覆盖原来的存储过程
可试了好几个方法,均无法实现.
//以下是SQL脚本
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[test1]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE [test1] AS
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

//实现有第一个方法
filename:='c:/sql.txt';
ADOQuery1.close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.LoadFromFile(filename);
ADOQuery1.ExecSQL;
如果将GO去掉后,运行提示"create procedure 必须是批查询中的第一条语句"
如果不将GO去掉,运行后提示第3行GO附近有错误。

//实现有第二个方法
写了个存储过程
CREATE PROCEDURE sp_ExecSQL(@strSQl text) AS
exec(@strsql)
GO

调用时
filename:='c:/sql.txt';
RichEdit1.Lines.LoadFromFile(filename);
with SP_exec do
begin
close;
procedurename:='sp_ExecSQL;1';
Parameters.ParamByName('@strSQl').Value:=RichEdit1.Lines.Text;
ExecProc;
close;
end;
如果将GO去掉后,运行提示"create procedure 必须是批查询中的第一条语句"
如果不将GO去掉,运行后提示第7行GO附近有错误。

 
1.The SQL property may contain only one complete SQL statement at a time.
In general, multiple multiple "batch" statements are not allowed unless a particular server supports them.
2.这样解决吧,首先从sql.txt找到第一个GO的位置,取出Go之前的文本然后执行,再从新取出
GO后的内容(把所有GO去掉)放到Sql中执行,分两次执行没问题的.
 
你是怎么做的?
 
看了半天也没找到解决办法 [:(]
有空再帮你看看 [:)]
 
不可能没人做过吧,快来帮帮我啊!
 
分两次执行有没有问题,试试没有。
 
可在这个脚本有许多个GO,那是不是得分很多次运行啊?
 
接受答案了.
 
后退
顶部