如何在一个脚本文件中超越OSQL的1000字符限制

[问题的提出]

在维护一个老的系统,用的是SQL2000。

需要向SE提交一个脚本文件来更新数据库。

SE要求:文件最好只有一个,不要弄好几个;双击就可以执行,不要打复杂的命令行。

 

[探讨]

一开始觉得这有何难,用个BAT/VBS调用OSQL执行一堆脚本就OK了。

一旦着手,发现不那么容易,OSQL的-Q参数不支持1000个字符以上的SQL语句。

如果是分语句执行到也算OK,最多就是多执行几次吧了。

但数据库中,有部分VIEW超大,CREATE VIEW单条语句本身就超过4K。

-i虽然可以支持理论上任意大小的文本,却需要多文件才能完成。

暗暗叫苦于之前已盲目答应SE的“非份”要求。

 

[解决]

再静下心来看,能不能让调用osql.exe的脚本文件中,osql的-i调用脚本自已呢?

-i所指向的输入文件到是无所谓,无论后缀,只要是合格的T-SQL,都能执行。

但如何让T-SQL与控制脚本熔于1个文件中?关键是如何可以分别将对方注释掉。

仔细的分析了各脚本语言后,发现*.js文件正好可以做到这件事。

主要的突破点在于*.js文件与*.sql的跨行注释方法完全一致。

而同时*.js却又有路径可以选择性的注释掉部分语句。

那就是条件编译。

 

JScript的相关说明如下:

Conditional compilation allows the use of new JScript language features without sacrificing compatibility with older versions that do not support the features.

Conditional compilation is activated by using the @cc_on statement, or using an @if or @set statement. Some typical uses for conditional compilation include using new features in JScript, embedding debugging support into a script, and tracing code execution.

Always place conditional compilation code in comments, so that hosts (like Netscape Navigator) that do not understand conditional compilation will ignore it. Here is an example.

 

 

This example uses special comment delimiters that are only used if conditional compilation is activated by the @cc_on statement. Scripting engines that do not support conditional compilation only see the message informing of the need for a new scripting engine.

 

模拟它写个如下的js文件,该文件既包含了运行SQL的控制语句,又含有需要运行的SQL语句。

有点象以前买到过的自带播放器的VCD光盘。

运用方法:拷贝下述代码存为后缀名为js的任意文件,双击即可运行。

  

 

感觉比较有趣,特此记录。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值