ADOCommand怎样批量执行sql语句
有如下语句需通过ADOCommand执行,不知道如何实现,求指教。
IF NOT EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'mydb') CREATE DATABASE [mydb]
use master
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_killspid]
GO
create proc p_killspid @dbname sysname as declare @s nvarchar(1000)
declare tb cursor local for
select s='kill '+cast(spid as varchar) from master..sysprocesses
where dbid=db_id(@dbname) open tb
fetch next from tb into @s
while @@fetch_status=0 begin exec(@s) fetch next from tb into @s end
close tb deallocate tb
GO
exec p_killspid 'mydb'
RESTORE DATABASE mydb FROM DISK ='C:\Documents and Settings\Administrator\桌面\11.bak'
[解决办法]
[解决办法]
直接把语句给ADOCommand->CommandText
然后一次性 Execute() 不行吗?我记得是可以的。
如果这些语句是保存到文件里的 也可以用
DOQuery1->SQL->LoadFromFile();
DOQuery1->ADOQuery1->ExecSQL() ;
[解决办法]
最好做成存储过程用TADOStore调用。
[解决办法]
还或者用TStringList。
因为SQL脚本中的Go是单独成行的,所以比较好判断,另外脚本中最好不要含有注释语句,如果注释过长的话会换行,这样要多判断一次。
另外SQL脚本要是Ansi格式,不要生成Unicode的,否则不能正确运行。
void __fastcall TForm1::Button1Click(TObject *Sender){ TStringList * SQL = new TStringList; SQL->LoadFromFile(ExtractFilePath(Application->ExeName) + "SQLScript"); ADOCommand1->CommandText = ""; for(int i = 0; i < SQL->Count; i++) { //遇到GO语句,执行 if(SQL->Strings[i] == "GO") ADOCommand1->Execute(); else //清除注释 if(SQL->Strings[i].SubString(0,2) == "/*" || SQL->Strings[i].SubString(SQL->Strings[i].Length()-2 ,2) == "*/") { } else //不是GO,不是注释,不为空,则是SQL的执行语句 if(SQL->Strings[i].Trim() != "" && SQL->Strings[i].Trim() != " " ) ADOCommand1->CommandText += SQL->Strings[i] + " "; }}