【问题标题】:multiple sql queries using single script in isql在 isql 中使用单个脚本进行多个 sql 查询
【发布时间】:2016-07-27 18:05:54
【问题描述】:

我在多个名为 1.sql 2.sql 等的 sql 文件中编写了几个 DDL 查询,其中 1000 个文件包含 2000 多个创建表语句

我必须在 unix b ox 中使用 sybase isql。

我想准备一个脚本,可以一一调用这些脚本。

怎么做

示例 1.sql有create table命令以go结尾

脚本大师。嘘

它包含 isql -S 服务器 -D 数据库密码等 -i 1.sql

到 1000.sql 也是一样

请告诉我如何运行

【问题讨论】:

    标签: unix sybase isql


    【解决方案1】:

    在你的 master.sh 中尝试以下几行。该代码假定所有文件都存在并且文件的名称从 1 到 1000 并且所有文件都存在于与您的 master.sh 脚本相同的目录中。您可以/必须添加额外的完整性检查来检查您的 sql 文件是否存在。

    #!/bin/bash
    
    for i in `seq 1 1000`
    do
        isql -S Server -D database password etc -i $i.sql
    done
    

    【讨论】:

      【解决方案2】:
      for (( i = 1; i <= 1000; ++i )); do
        isql -S Server -D database password etc -i $i.sql
      done
      

      为避免对isql 进行一千次调用,每次都设置网络连接、身份验证等(这需要时间):

      for (( i = 1; i <= 1000; ++i )); do
            cat $i.sql
      done | isql -S Server -D database password etc
      

      如果各个文件中的SQL相互独立(即文件534.sql可能在55.sql之前运行),你甚至可以尝试

      cat *.sql | isql -S Server -D database password etc
      

      【讨论】:

        【解决方案3】:

        如果您不确定文件的数量,请将它们全部移动到一个目录中,并确保它们具有相同的扩展名(如“*.sql”)。然后你可以有一段代码如下:

        #!/bin/bash
        
        for fn in `ls -l *.sql | awk '{print $9}' `
        do
        isql -S ServeName -D DatabaseName -U UserName -P PassWord -i $fn 
        done
        

        【讨论】:

        • 不要解析ls的输出,*.sql就可以了。
        • @Kusalananda 解析用于从ls -l 的输出中过滤掉文件名,通常如下所示:-rw-r--r-- 1 user1 group1 8279 Apr 11 2014 test.log
        • 整个反引号位可以只替换为*.sql。不需要调用lsawk
        猜你喜欢
        • 2018-10-13
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        相关资源
        最近更新 更多