zjm12233zjm 2023-01-06 12:58 采纳率: 62.5%
浏览 21

sql server osql 批量执行sql文件,数据没了

因为分离跟备份都失败,尝试用生成脚本文件的方式备份数据库。
每个数据库表生成一个单独的sql 文件,因此有大量的sql 文件,一个个打开执行,就能达到备份的效果。但是数量太多就尝试用bat文件进行批处理,在网上找到bat如下代码,制作成bat文件后,执行 可以生成相应的表格,但是表格里没有数据。请问如何改才能既生成表格,又保留里面的数据。

@echo off
 
set PARMSER=127.0.0.1
set PARMDB=ODBC_123
set PARMUSRID=sa

set PARMPSW=abcdef
 
echo on
 

del Script_Data_Prepare_%PARMDB%.log
 
echo "--------------------- Creation of Promotion Package Tasks -------------------------" >> Script_Data_Prepare_%PARMDB%.log
echo Starting >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | date/t >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | time/t >> Script_Data_Prepare_%PARMDB%.log
 
echo "---------- dbo.测试.Table.sql-----------" >> Script_Data_Prepare_%PARMDB%.log
osql /U %PARMUSRID% /P %PARMPSW% /S %PARMSER% /D %PARMDB% -w999 /n /i D:\dbo.测试.Table.sql >> Script_Data_Prepare_%PARMDB%.log -w 1000 -x 1000000000

echo "">> Script_Data_Prepare_%PARMDB%.log
 
echo "Program ended at" >> Script_Data_Prepare_%PARMDB%.log
 
echo ' ' | date/t >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | time/t >> Script_Data_Prepare_%PARMDB%.log
 
:endproc

  • 写回答

1条回答 默认 最新

  • 卑以自牧w 2023-01-09 15:05
    关注

    可以用shell命令批量执行文件

    #!/bin/bash
    
    #execute all script in specified directory
    
    MYDATE=$(date +%F'-'%T'-'%w)
    
    MYSQL_PATH=/opt/modules/scripts/test_sql #指定的目录
    
    confirm=
    
    db_name=
    
    db_pass=
    
    for file in ${MYSQL_PATH}/*; do
    
        if [ -f "$file" ]; then
    
            postfix=$(echo $file | awk -F'.' '{print "."$NF}')
    
            if [ $postfix = ".sql" ]; then
    
                if [ ! $db_name ]; then #如果没有指定数据库
    
                    read -p "请输入数据库名:" db_name
    
                    read -p "你输入的数据名是【$db_name】,确认继续请输入--yes--: " confirm
    
                fi
    
                if [ "$confirm" = "yes" ] && [ -n $confirm ]; then
    
                    if [ ! $db_pass ]; then #如果没有设置密码
    
                        stty -echo #密码输入保护关闭显示
    
                        read -p "请输入数据库密码:" db_pass
    
                        echo -e "\n"
    
                        stty echo
    
                    fi
    
                    mysql -uroot -p$db_pass -P3306 --default-character-set=utf8 ${db_name} <$file >&error.log
    
                    echo $file
    
                    echo -e "\n===========$file=============\n" >>${LOG_FILE}
    
                    cat error.log >>${LOG_FILE}   #输出执行日志
    
                    error=$(grep ERROR error.log) #读取错误日志信息
    
                    if [ -n "$error" ]; then #如果有错误就退出程序
    
                        echo $error
    
                        exit
    
                    fi
    
                else
    
                    echo "您已经取消操作!"
    
                    exit
    
                fi
    
            fi
    
        fi
    
    done
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月6日

悬赏问题

  • ¥30 使用matlab将观测点聚合成多条目标轨迹
  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析