1.连接sqlserver
sqlcmd -S localhost\sqlserver_name2.连接数据库
sqlcmd -S localhost\sqlserver_name -d database_name3.执行SQL语句
sqlcmd -S localhost\sqlserver_name -d database_name -Q "SELECT * FROM [table_name]"4.执行SQL脚本文件
sqlcmd -S localhost\sqlserver_name -d database_name -i "SQL file path"5.将查询的结果集输出到文件
sqlcmd -S localhost\sqlserver_name -d database_name -o "file path"6.输出的结果集字符较长,输出到控制台和文本都不能显示完全,需要再加一个参数
sqlcmd -S localhost\sqlserver_name -d database_name -y 1024 -Q "SELECT * FROM [table_name]" -- 注:此处的“-y”后面的值可以更改,如果还是不能完全显示,将数值再改大一点7.查询sqlserver 命令参数
sqlcmd -?8.备份数据库
> sqlcmd -S localhost\sqlserver_name > backup database database_name to disk='E:\backup\database_name.bak' > go9.通过database_name.bak文件查询逻辑名
restore filelistonly from disk='path/to/backup/file.bak'10.恢复数据库
--(1)先查询数据库是否存在,存在就删除 -- a. 查询数据库 > sqlcmd -S localhost\sqlserver_name > select [Name] from [sysdatabases] > go -- b. 删除数据库 > drop database database_name (2)恢复数据库,在进入实例服务的情况下(即sqlcmd -S localhost\sqlserver_name)执行以下语句: > restore database database_name from disk='D:\backup\database_name.bak' > with > move 'database_name' to 'D:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\database_name.mdf', > move 'database_name_log' to 'D:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\database_name_log.ldf' > go11. 修改数据库的名称
> restore database update_database_name from disk='E:\backup\database_name.bak' > with > move 'database_name' to 'E:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\update_database_name.mdf', > move 'database_name_log' to 'E:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\update_database_name_log.ldf' > go12. 获取数据的逻辑名和日志逻辑名
-- 方式一: select file_name(1),file_name(2) -- 方式二: SELECT name FROM sys.database_files13. 修改数据的逻辑名或者日志逻辑名
ALTER DATABASE [database_name] MODIFY FILE ( NAME = database_name, NEWNAME = new_database_name ) ALTER DATABASE [database_name] MODIFY FILE ( NAME = database_nameb_log, NEWNAME = new_database_name_log )14. 查询数据文件或日志文件当前存放路径
SELECT physical_name FROM sys.database_files15. bcp 命令的使用
-- 导出整张表 bcp MDataPort.dbo.Recording out E:\Backup\recording.bcp -S .\sqlexpress -T -c -- 导入整张表 bcp MDataPort.dbo.Recording in E:\Backup\recording.bcp -S .\sqlexpress -T -c -- 导出指定时间戳 bcp "select * from MDataPort.dbo.Recording where Timestamp >= '2019-02-01 00:00:00'" queryout E:\Backup\recording_20190201.bcp -S .\sqlexpress -T -c -- 导出指定列 bcp "select Timestamp from MDataPort.dbo.Recording" queryout E:\Backup\recording_Timestamp.bcp -S .\sqlexpress -T -c16. row_number()分页
-- 对源表进行重新排序,并增加一个排序的ID字段 select row_number() over(order by id) as ROWID, * from [table_name] ) as new_table_name where ROWID > OnePageNum* (CurrentPage-1) --原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录 -- 这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的 -- Annotation:OnePageNum每页显示的记录数 -- CurrentPage:当前页页数17. 遍历表
DECLARE @i int , @timestamp datetime2(7), @type tinyint, @mea uniqueidentifier SET @i = 1 WHILE (@i <= (select count(*) from [Recording])) BEGIN select top 1 @mea = [MeasurementID], @timestamp = 1614442067, @type = [Type] from ( -- 对源表进行重新排序,并增加一个排序的ID字段 select row_number() over(order by [MeasurementID], 1614442067, [Type]) as ROWID, * from [Recording] ) as new_table_name where ROWID > 1 * (@i-1) update [Recording] set [Temperature] = (select cast( floor(rand()*100) as int)) where [MeasurementID] = @mea and 1614442067 = @timestamp and [Type] = @type SET @i = @i + 1 END GO注1:以上连接数据库的方式都是windows自动验证连接
注2:若是恢复失败的话,可以找到sqlserver安装目录(即MSSQL11.SQLEXPRESS)右击属性---->安全---->查看User权限的权限
注3:sqlserver_name:数据库服务名 database_name:数据库名 table_name:表名
