zoukankan      html  css  js  c++  java
  • sqlcmd介绍

    最近经常用到超过80M *.sql文件的导入问题。

    上网找了一下,发现超过80M的文件是不能在查询分析器中执行的。

     sqlcmd  -U "sa" -P "111" -d "databasename" -i "mydata.sql"

    找了些解决方案,个人感觉最简单的方法就是这个SQLCMD的,拿出来分享一下,也方便日后自己使用。

    1 sqlcmd -S SERVERNAME -U USERNAME -P PASSWORD -i filename.sql

    下面的内容是详细介绍sqlcmd的,有兴趣的朋友可以看看

    因为公司的业务需要,所以采集了一个2W多条的数据,都是insert语句,生成一个200多M的数据,谁料在通过sql server 2005不能直接打开,导入也存在问题,用记事本也打不开,复制贴也不行,最后还是一同学提了个醒用命令在dos下执行.sql文件,才有了办法,同时也 在一热心网友的帮助下完成了这个让我头疼半天的活,下面我对这些做一下介绍,应该对有这样需要的朋友很好的帮助。

    如果装的是2000版的sql那用的命令是osql,05的用sqlcmd

    其实用法很简单,任何技术,一旦说穿就失去了它的神秘,这有点像生活中的很多事,好了废话了半天,还是切入正题,开工吧:

    其实就是一句很简单的话句:

    sqlcmd -i sqlfile.sql -d databasename -s 127.0.0.1

    这个sql文件要放在c:下

    就这么简单..

    sqlcmd 使用笔记

    登录sqlcmd

    命令 sqlcmd -S 服务器名称 -U 帐户 -P 密码

    示例 sqlcmd -S "HOMESQLEXPRESS" -U "sa" -P "12345678"

    直接执行SQL Script

    命令 sqlcmd -S 服务器名称 -U 帐户 -P 密码 -d 数据库 -i SQL Script

    示例 sqlcmd -S "HOMESQLEXPRESS" -U "sa" -P "12345678" -d "Database" -i "E:My Documentstest.sql"

    查询当前服务器上的数据库

    (*) 可能需要 Use Master

    1. Select [Name] From sysdatabases

    2. sp_helpdb

    查询当前数据库的表和存储过程

    表:select * from sysobjects where status >=0 and xtype='U'

    存储过程:select * from sysobjects where status >=0 and xtype='P'


    ------------------------
    1、你可以用SQLCMD执行交互式动作,如:
    C:sqlcmd>sqlcmd

    1> SELECT name from sys.databases

    2> GO

    你也可以试着键入如下命令,现实服务器列表

    1>:ServerList

    SERVERS:

    WUYZ

    1>如果想看其他命令的使用,可以键入:Help /?

    2、执行SQL脚本文件

    你可以在SQLCMD命令上加入参数I来执行SQL脚本文件,例如:

    C:sqlcmd>sqlcmd -i test.sql

    上面的I选项允许你执行一个脚本文件,另外,你也可以指定O选项,把命令的输出导出到指定文件,当然,我们也可以在代码中指定输出结果,如下

    C:sqlcmd>sqlcmd

    1> :out output.txt

    2> :r test.sql

    3、在脚本中使用变量

    SQLCMD支持可以在脚本中接收用户传入的变量信息,如下面语句:

    SET NOCOUNT ON

    Select $(Cols) from $(tablename)

    GO

    上面语句请求2个参数,我们可以通过指定相应的参数信息传给脚本,如下:

    C:sqlcmd>sqlcmd -i test.sql -o Output.txt -v cols="name,object_id,create_date" tablename="sys.objects"

    上面语句的用途是:执行TEST.SQL脚本文件,并把输出的信息输出到OUTPUT.TXT文件中,并分别指定了COLS,TABLENAME的参数值

    4、在脚本中设置变量的值
    除了通过外部传入参数的值外,还可以在内部设置参数的值,如下面例子

    e:sqlcmdackuptemplate.sql

    use master

    backup database [$(db)] to disk='$(file)'

    e:sqlcmdackupsingle.sql

    :setvar db msdb

    :setvar file c: empmsdb.bak

    :r e:sqlcmdackuptemplate.sql

    如果你想知道当然定义了哪些变量,可以使用:listvar命令来显示。主要命令汇总:

    :r filename

    :ServerList

    :List

    :Listvar

    :Error filename | STDOUT | STDERR

    :Out filename | STDOUT | STDERR

    :Perftrace filename | STDOUT | STDERR

    :Connect server[instance] [timeout] [user_name[password] ]

    :On Error [exit | ignore]

    :SetVar variable value

    :Help:XML ON | OFF

    主要环境变量汇总:

    -a SQLCMDPACKETSIZE

    -d SQLCMDDBNAME

    -H SQLCMDWORKSTATION

    -h SQLCMDHEADERS

    -l SQLCMDLOGINTIMEOUT

    -m SQLCMDERRORLEVEL

    -P SQLCMDPASSWORD

    -S SQLCMSSERVER

    -s SQLCMDCOLSEP

    -t SQLCMDSTATTIMEOUT

    -U SQLCMDUSER

    -w SQLCMDCOLWIDTH

    ------------------------
    T-SQL还原数据库备份
    restore database TionkDatabase from disk='E:@工作讯客项目讯客直销代码db20080521'
    width move "源文件" to "目标文件位置"

    ------------------------
    使用 T-SQL 执行还原

    RESTORE 命令有两种形式显示如下:
    RESTORE DATABASE 还原完整的资料库、档案或档案群组。
    RESTORE LOG 还原交易记录档。

    RESTORE 陈述式

    执行完整资料库还原时 RESTORE 陈述式的语法如下:
    RESTORE DATABASE database_name
    [ FROM backup_device ]
    [ WITH options ]
    这个陈述式只要求资料库的档案名称和备份所在的位置。

    执行档案和档案群组还原时陈述式的语法如下:
    RESTORE DATABASE database_name
    [ FILE = file_name ]
    [ FILEGROUP = filegroup_name ]
    [ FROM backup_device ]
    [ WITH options ]
    这个陈述式只要求资料库名称、档案名称或档案群组名称和备份所在的位置。

    执行交易记录还原时陈述式的语法如下:
    RESTORE LOG database_name
    [ FROM backup_device ]
    [ WITH options ]
    就如同其他的命令,database_name 是还原将要执行的资料库名称。backup_device 参数可以是逻辑备份装置名称或实体装置的名称。如果要指定一个实体装置,必须限定它的装置类型-也就是说,装置名称前面必须加上 DISK=、TAPE= 或 PIPE=。可以指定一个或多个装置,中间以逗号隔开。

    如果没有提供 FORM 子句,还原将无法进行,而且仍然会执行回复(除非执行NORECOVERY 选项)。这项技术可以用来将资料库设定为回复模式,而不还原其他附加资料。例如,可以执行多个差异还原操作,然后执行 RESTORE 陈述式,不需要 FORM 子句来将资料库设定为回复模式,就能够启动回复过程。

    选项

    选项                        说明
    RESTRICTED_USER             设定新还原资料库的安全性,只有 db_owner、dbcreater 和 sysadmin 角色成员才能存取该资料库。
    FILE = file_number          如果在储存媒体中有多个备份集,可用来识别所使用的备份集。例如设定该数值为2,则使用磁带上的第二个备份集。
    PASSWORD = password         指定储存备份的密码。
    MEDIANAME =media_name       指定媒体的名称。
    MEDIAPASSWORD = password    指定储存媒体的密码。
    MOVE 'logical_file_name' TO 'OS_file_name'
    更改还原档案的位置,例如:MOVE 'Northwind' TO 'D:dataNorthwind.mdf'。如果旧的磁碟无法使用,而需要还原到新的磁碟上时,可以使用这个选项。

    NORECOVERY |RECOVERY | STANDBY = undo_file
    NORECOVERY 指定在还原后,交易将无法退回或重新进行。如果将还原其他的备份(差异式备份或交易记录档备份),则需要用到这个选项。REVOVERY 为预设选项,它指定执行回复操作,并退回每个没有提交的变更。STANDBY 指定在还原需要还原情况下,建立还原(undo)档案。
    KEEP_REPLICATION 指定当资料库还原时复制设定要保存下来。
    NOUNLOAD | UNLOAD NOUNLOAD 指定在还原完成后不卸载储存媒体(例如,覆写备份磁带并弹出)。UNLOAD 为预设选项,指定在还原完成后卸载储存媒体。
    REPLACE 指出即使资料档案已经存在,SQL Server 仍将还原这些档案。现存的档案将被删除和覆写。如果没有指定 REPLACE,那麼 SQL Server 将会核对 database_name 是否已经存在。如果已经存在,那麼将终止还原操作。这个安全特性帮助避免无意地将还原覆写正在工作的资料库。
    RESTART 指定 SQL Server 在还原操作被中断后重新启动还原操作。
    STATS [ = percentage ] 在还原操作完成了指定的百分率后显示讯息。如果需要监控操作的过程,这个选项将会很有用。
    PARTIAL 指定执行部份还原。
    STOPAT = date_time

    (log restore only) www.koogoogle.cn/whois
    指定资料库回复到 data_time 指定时刻的资料状态(只对记录档还原有效)。
    STOPATMARK = 'mark' 指定还原操作进行到标记处。
    STOPBEFOREMARK = 'mark' 指定还原操作进行到标记之前。

    通过System.Data.SqlClient命名空间只能执行单条SQL,或多个内容中间用;分开,不能执行类似等命令,有没有一种方法能类似查询分析器一样执行一些批命令呢,答案是通过OSQL来执行。
    OSQL详细用法:http://technet.microsoft.com/zh-cn/library/ms162806.aspx
    通地进程来调用:

    SQLCMD的介绍C#代码
     1         /// <summary>
     2         /// 执行OSQL命令
     3         /// </summary>
     4         public static  void ExcuteOsqlCmd(string cmd, string errorFile, string filePath)
     5         {
     6              System.Diagnostics.Process p = new System.Diagnostics.Process();
     7 
     8              p.StartInfo.FileName = "osql";
     9              p.StartInfo.Arguments = cmd;
    10              p.StartInfo.UseShellExecute = false;
    11 
    12              p.StartInfo.RedirectStandardError = true;
    13              p.StartInfo.CreateNoWindow=true;
    14              p.Start();
    15              p.WaitForExit();
    16             //p.Close();
    17             int exitCode = p.ExitCode;
    18             if (exitCode != 0)
    19             {
    20                  StreamReader sr = new StreamReader(errorFile, System.Text.Encoding.Default);
    21                 string all = sr.ReadToEnd();
    22                  sr.Close();
    23                 //ExcuteOtherCmd(string.Format("notepad "{0}"", errorFile));
    24                 throw new StepException(all);
    25              }
    26          }

     调用如下:
    string comm = string.Format(" -U {5} -P {0} -S {1} -d {2} -b -e -i "{3}" -o "{4}"", pass,
                                             conn.DataSource,
                                             conn.Database,
                                             FilePath, errorFile,user);
    Process.ExcuteOsqlCmd(comm, errorFile, FilePath);//直接执行一个SQL文件,路径为FilePath

     
  • 相关阅读:
    QT:不规则窗口的实现
    Sql Server (错误:7302)
    Qt源码分析之信号和槽机制
    Linux下如何发布Qt程序
    QT程序制作deb包并安装在应用程序菜单
    Another Look at Events(再谈Events)
    Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)
    新浪微博回归平静
    Qt中 QString 和int, char等的“相互”转换,关键是QString.toLocal8Bit().data();
    QT中异形窗口的绘制(winEvent处理WM_NCHITTEST消息)
  • 原文地址:https://www.cnblogs.com/shanwater/p/6560702.html
Copyright © 2011-2022 走看看