sqlcmd是个好玩意儿

2023-10-30

sqlcmd是什么?

sqlcmd真是开发者的福利,有了这玩意儿之后,数据库的部署,与数据库相关的一些自动化工作忽然简单了好多,也算是一个神器了。sqlcmd可以通过以下方式执行sql语句,sql脚本和系统过程!

  • 通过命令提示符
  • 在查询编辑器中的 SQLCMD 模式下
  • Windows 脚本文件中
  • 在 SQL Server 代理作业的操作系统 (Cmd.exe) 作业步骤中

sqlcmd命令

我们可以在命令行下输入sqlcmd -?来查看sqlcmd支持的命令,结果如下,非常清晰,如果很少使用sql server或者其他数据库,可能有一点点懵,没有关系,我们下边看几个使用例子就好了。

Microsoft (R) SQL Server Command Line Tool
Version 15.0.2000.5 NT
Copyright (C) 2019 Microsoft Corporation. All rights reserved.
  [-N Encrypt Connection][-C Trust Server Certificate]
  [-d use database name] [-l login timeout]     [-t query timeout]
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f <codepage> | i:<codepage>[,o:<codepage>]] [-Z new password and exit]
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-K application intent]
  [-M multisubnet failover]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-j Print raw error messages]
  [-g enable column encryption]
  [-G use Azure Active Directory for authentication]
  [-? show syntax summary]

使用实例

这里举几个例子,例子在windows的cmd下演示,但是实际应用中,完全可以放到windows脚本中进行自动化。

使用sqlcmd创建数据

在上边的help中我们看到有这么一个选项,[-i inputfile],使用这个选项可以执行sql脚本,我们首先写好数据库创建的脚本,然后使用这个选项执行以下,就可以完成数据库的自动创建了。

sqlcmd -i bankDB.sql

执行sql语句

以下是执行sql语句进行增删查的例子,

sqlcmd -d dbBank -Q "delete from t_user"
sqlcmd -d dbBank -Q "INSERT INTO t_user (code, name) VALUES (1,'xiaoming')"
sqlcmd -d dbBank -Q "select * from t_user"

上边的例子中,dbBank是数据库实例名,-Q表示执行完语句后退出。

下边我们执行一个查询,看看效果,

PS C:\db> sqlcmd -d dbBank -Q "select x,y,z from t_gps"     
x                        y                        z
------------------------ ------------------------ ------------------------
     -23841.519381999999       10031.667928000001             10465.281665
     -23842.630016999999               10032.4208             10464.572515
     -23840.958706000001             10035.797155             10471.961947
     -23841.268124999999       10035.490234000001              10471.82294
            -23842.15193             10034.437113             10473.411489
     -23842.123846999999             10034.731308             10473.716693
     -23844.085588000002       10034.371595000001       10478.963207999999

当然我们如果直接将上边的查询使用-o选项进行导出,进行分析,那么这个分列可不太好,我们虽然可以使用excel工具的分列功能,可是如果我们进行下边的查询,那就不是那么容易分列了,

PS C:\db> sqlcmd -d dbBank -Q "select gpstime,x,y,z from t_gps"
gpstime                 x                        y                        z
----------------------- ------------------------ ------------------------ ------------------------
2020-05-29 18:15:00.000      -23841.519381999999       10031.667928000001             10465.281665
2020-05-29 18:30:00.000      -23842.630016999999               10032.4208             10464.572515
2020-05-29 18:45:00.000      -23840.958706000001             10035.797155             10471.961947
2020-05-29 19:00:00.000      -23841.268124999999       10035.490234000001              10471.82294
2020-05-29 19:30:00.000             -23842.15193             10034.437113             10473.411489
2020-05-29 19:45:00.000      -23842.123846999999             10034.731308             10473.716693
2020-05-29 20:00:00.000      -23844.085588000002       10034.371595000001       10478.963207999999
2020-05-29 20:15:00.000            -23843.295811       10034.750808999999             10477.039223
2020-05-29 20:30:00.000      -23842.700742000001             10034.844998       10476.080190000001
2020-05-29 20:45:00.000            -23842.613986             10034.876617       10475.102005999999
2020-05-29 21:00:00.000            -23842.190895             10034.803967       10475.072185999999
2020-05-29 21:15:00.000      -23841.973268000002       10034.931447999999               10475.0244

为什么呢?因为我们第一列是日期时间列,可是这中间有个空格,如果我们使用空格分列,那么这个日期时间列的数据也会被分割为两列,而且即便有办法分割成功,可是我们毕竟付出了一定的effort,何必如此呢。

PS C:\db> sqlcmd -d dbBank -s ',' -Q "select gpstime,x,y,z from t_gps"
gpstime                ,x                       ,y                       ,z
-----------------------,------------------------,------------------------,------------------------
2020-05-29 18:15:00.000,     -23841.519381999999,      10031.667928000001,            10465.281665
2020-05-29 18:30:00.000,     -23842.630016999999,              10032.4208,            10464.572515
2020-05-29 18:45:00.000,     -23840.958706000001,            10035.797155,            10471.961947
2020-05-29 19:00:00.000,     -23841.268124999999,      10035.490234000001,             10471.82294
2020-05-29 19:30:00.000,            -23842.15193,            10034.437113,            10473.411489
2020-05-29 19:45:00.000,     -23842.123846999999,            10034.731308,            10473.716693
2020-05-29 20:00:00.000,     -23844.085588000002,      10034.371595000001,      10478.963207999999
2020-05-29 20:15:00.000,           -23843.295811,      10034.750808999999,            10477.039223
2020-05-29 20:30:00.000,     -23842.700742000001,            10034.844998,      10476.080190000001
2020-05-29 20:45:00.000,           -23842.613986,            10034.876617,      10475.102005999999
2020-05-29 21:00:00.000,           -23842.190895,            10034.803967,      10475.072185999999

如上,我们只需要加入-s来指定列的分隔符 (colseparator),我们指定输出文件的时候如果是csv格式,那么我们就无需分列了,被逗号隔开的地方自然分列。另外如果我们不希望看到多余的空格,那么只需再加一个选项-W,如下,

C:\db>sqlcmd -d dbBank -W -s , -Q "select gpstime,x,y,z from t_gps"
gpstime,x,y,z
-------,-,-,-
2020-05-29 18:15:00.000,-23841.519381999999,10031.667928000001,10465.281665
2020-05-29 18:30:00.000,-23842.630016999999,10032.4208,10464.572515
2020-05-29 18:45:00.000,-23840.958706000001,10035.797155,10471.961947
2020-05-29 19:00:00.000,-23841.268124999999,10035.490234000001,10471.82294
2020-05-29 19:30:00.000,-23842.15193,10034.437113,10473.411489
2020-05-29 19:45:00.000,-23842.123846999999,10034.731308,10473.716693
2020-05-29 20:00:00.000,-23844.085588000002,10034.371595000001,10478.963207999999
2020-05-29 20:15:00.000,-23843.295811,10034.750808999999,10477.039223
2020-05-29 20:30:00.000,-23842.700742000001,10034.844998,10476.080190000001
2020-05-29 20:45:00.000,-23842.613986,10034.876617,10475.102005999999
2020-05-29 21:00:00.000,-23842.190895,10034.803967,10475.072185999999
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlcmd是个好玩意儿 的相关文章

  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • 单独的逗号分隔值并存储在sql server的表中

    我有一个存储过程 它将逗号分隔的值作为输入 我需要将其分开并需要将其作为单独的行存储在表中 令 SP 的输入为 Rule ID ListType ID Values 1 2 319 400 521 8465 2013 我需要将它存储在一个名
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • MyBatis:在一个查询中通过注释收集

    我有一个 xml 映射器 一个选择映射器和一个结果映射器 它工作没有问题 但我想使用注释 我的映射器
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 计算运行总计时出错(之前期间的累计)

    我有一张桌子 我们称之为My Table有一个Created日期时间列 在 SQL Server 中 我试图提取一个报告 该报告显示历史上有多少行My Table按月在特定时间 现在我知道我可以显示有多少added每个月 SELECT YE
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • Windows C++ 中的键盘钩子还是什么?

    我希望构建自己的应用程序 它可以将键盘命令 消息 发送到 Windows 操作系统 例如 当我按下组合键 ctrl shift n 时 我希望启动 notepad exe 我怎样才能做到这一点 您对所使用的概念有什么建议吗 我读过 何时使用
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型
  • MS ACCESS 计数/求和行数,不重复

    我有下表 我需要计算总行数而不包括任何重复记录 CustomerID test1 test1 test2 test3 test4 test4 如您所见 总行数为 6 但有两个 test1 和两个 test4 我希望查询返回 4 IOW 我想
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p

随机推荐

  • jenkins报“”Build step 'Execute Windows batch command' marked build as failure“”

    报错信息如下 解决方法
  • JVM垃圾回收器

    1 垃圾回收器的位置 2 垃圾回收器的基本概念 什么是垃圾回收器 JVM 为 Java 提供了垃圾回收机制 是一种偏自动的内存管理机制 简单来说 垃圾回收器会自动追踪所有正在使用的对象 并将其余未被使用的对象标记为垃圾 JVM会自动进行垃圾
  • 前端知识

    http www yyyweb com 5136 html 当经历所有大厂的实习后 小鱼 发布于 2018 08 15 分类 程序人生 阅读 43 评论 0 七月虽然不是一个丰收的季节 但却是一个十分酷热的月份 不知有多少小伙伴跟我一样 顶
  • MySQL server和workbench安装使用

    1 安装Notepad 运行下载的 npp 7 9 Installer x64 exe 2 安装MySQL 将mysql 8 0 22 winx64 zip解压缩 我将其放置D盘根目录下 进入文件夹 在目录中新建文件夹data和文件my i
  • docker登录私有镜像仓库时报错: x509: certificate signed by unknown authority

    文章目录 描述 报错 解决步骤 描述 由于机器在内网无法使用yum或rpm安装docker 所以使用的是离线安装 安装完成后 发现无法登录镜像地址 报错 Error response from daemon Get https swr cn
  • 队列的应用——(一)广度优先搜索

    在队列中 同样可以用于走迷宫 而且会出现一个与之前不同的情形 代码如下 C myqueue h include
  • OTA-apache本地服务器的搭建以及配置说明

    1 下载适配到本机型的Apache msi软件 这里我的电脑是32位的 下载的是apache 2 2 8 win32 x86 no ssl msi 2 apache环境变量的搭建 在计算机系统 gt 高级 gt 环境变量下的PATH后面添加
  • 一次注册表事故--无法打开exe文件

    下载了腾讯手游助手之后发现exe 的安装程序打不开 这就很郁闷了 下载了不同版本的都是打不开 难道是安装包有问题 为什么别人的电脑就能安装 我的电脑exe文件都能打开 为什么就腾讯手游助手不能打开呢 去网上搜集解决方法 百度经验上看到 说是
  • Cuda10.1总结1-概述

    概述 参考文献 官方在线文档 https docs nvidia com cuda archive 10 1 由于网页加载速度比较慢 可以参考如下文档 CUDA C Programming Guide C编程指南 CUDA C Best P
  • Android利用GridView制作横向列表

    p p p p p 1 在Activity对应的xml内 p p p pre class html pre
  • CSS重构

    1 重构和架构 重构是指在不改变代码行为的前提下 重写代码 使其更加简洁 易于复用 架构是指软件项目的各个不同部件之间的组合方式 优秀的架构 可预测 可以对软件的工作方式和结构做出准确的假设 可复用 在多处使用同一代码 无需重写 可扩展 比
  • 索引 第2关:用alter table创建索引

    任务描述 使用ALTER TABLE语句 1 为product商品表的descn商品详情的前两个字符和catid目录编号列添加索引descn catid 2 为product商品表的name商品名列添加唯一性索引unique name 3
  • qt自定义控件-多类别提示框

    一 前言 用惯了自带的messagebox 或者感觉效果不是很好看 或者有界面的特殊美观需求等等 那么就定制吧 1 单选项提示框 2 双选项提示框 3 滚动选项提示框 4 密码提示框 5 多组合选项提示框1 6 多组合选项提示框2 7 多组
  • 【华为OD机试真题2023 JS】快递投放问题

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 快递投放问题 知识点图BFS搜索 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 有N个快递站点用字符串标识 某些站点之间有道路连接 每个站点有一些包裹要运输 每
  • java.lang.RuntimeException: com.intellij.ide.plugins.PluginManager

    描述 在mac电脑上的Android Studio 因为项目需求 加载plugins中的dart和Flutter插件 经过科学上网后 依然无法从AS中加载进来 曲折到Jetbrains官网下载了dart和Flutter的插件包 再引入到AS
  • PyCharm常用快捷键

    00 万能搜索 可以搜索文件名 类名 方法名 还可以搜索目录名 搜索目录的技巧是在在关键字前面加斜杠 Double Shift 01 代码智能提示 由于PyCharm默认的代码智能提示是 Ctrl Space 但是因为Ctrl Space是
  • LESS-23 LESS-25 LESS-25a

    LESS 23 源码 以此可知可以通过报错注入等方式 语法 mixed preg replace mixed pattern mixed replacement mixed subject int KaTeX parse error Exp
  • docker应用安装之部署Springboot项目

    docker部署springboot项目分为以下2步 springboot项目的JAR包生成镜像文件 将镜像文件生成容器 并完成部署 一 springboot项目的JAR包生成镜像文件 编写Dockerfile文件 执行以下命令 mkdir
  • 谷歌翻译插件Translate Web Pages

    官方下载页 https github com FilipePS Traduzir paginas web releases Chrome 谷歌浏览器 下载 TWP x x x Chromium zip Chrome安装扩展 配置 使用的操作
  • sqlcmd是个好玩意儿

    文章目录 sqlcmd是什么 sqlcmd命令 使用实例 使用sqlcmd创建数据 执行sql语句 sqlcmd是什么 sqlcmd真是开发者的福利 有了这玩意儿之后 数据库的部署 与数据库相关的一些自动化工作忽然简单了好多 也算是一个神器