:)读取*.sql文件生成 sql server 7 的数据库的方法! 作者:panjiaohong-----转载

ping_ping 2001-09-15 12:08:08
加精
在pb 中利用execute immediate :ssql,即可执行后台数据库的语句,本人通过查阅资料及通过不断的实验,获得了一种通过读取*.sql文件生成 sql server 7 的数据库的方法,现公布如下,以对大家起到抛砖引玉的作用:
因为pb的限制,不能一次性读入大于32KB的sql脚本文件,需要修改fileread代码,利用循环将整个文件读入,
f_readfile的代码
参数:string str_file[]为实例变量
参数:str_filenameinteger li_FileNum, loops,i
long flen, bytes_read, new_pos
blob b
string str_sqlexecute
SetPointer(HourGlass!)
flen = FileLength(str_filename)
li_FileNum = FileOpen(str_filename, StreamMode!, Read!, LockRead!)
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
new_pos = 1
FOR i = 1 to loops
bytes_read = FileRead(li_FileNum, b)
str_file[i]=string(b)
NEXT
FileClose(li_FileNum)
利用ms sql sever 7.0 enterprise manager 生成sql文件(注意要将options->file format 选为ms-dos text(oem),默认格式是internation text(unicode),此格式不能被pb 的 fileread函数正确读出。)
再用以下代码生成数据库的对象:
integer i,li_postion,l_upper
l_upper=upperbound(str_file)
for i=1 to l_upper
li_postion=pos(str_file[i],"GO",1)
do while li_postion<>0
str_sqlexecute=trim(mid(str_file[i],1,li_postion - 1))
execute immediate :str_sqlexecute;
str_file[i]=mid(str_file[i],li_postion+2)
li_postion=pos(str_file[i],"GO",1)
loop
if i<l_upper then
str_file[i+1]=str_file[i]+str_file[i+1]
end if
next

...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
llsyhy 2001-12-14
  • 打赏
  • 举报
回复
谢谢班竹
daluobo 2001-11-24
  • 打赏
  • 举报
回复
我感兴趣
NetColorWolf 2001-11-03
  • 打赏
  • 举报
回复
我认为仅仅以字符是否为"GO"来判断是否是一条SQL命令不在恰当。

比如,我有一个创建trigger或者sp的脚本,其中包含了一句:
label1:
...

GOTO label
...

那不就是说你要求程序执行这两句SQL:
1:
...
GO

2:
TO label1
...

这显然是不正确的

SO,我一直都是用ISQL.EXE来执行SQL脚本文件。

不过,你这样到是提醒我了,我查了一下MS SQL SERVER的HELP:
GO 不是 Transact-SQL 语句;而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。

那可以这样判断:检查 char(13) + char(10) + 'GO' + char(13) + char(10)
或者检查 char(13) + char(10) + 'go' + char(13) + char(10)

等我试试后,再说。。。
met 2001-09-15
  • 打赏
  • 举报
回复
关注。。,
PBVC 2001-09-15
  • 打赏
  • 举报
回复
gz

34,870

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧