[玩转系统] 使用 PowerShell 查询 Microsoft SQL Server (MSSQL) 数据库
作者:精品下载站 日期:2024-12-14 20:21:50 浏览:13 分类:玩电脑
使用 PowerShell 查询 Microsoft SQL Server (MSSQL) 数据库
在本文中,我们将讨论连接到 Microsoft SQL Server 并从 PowerShell 运行 SQL 查询的所有有效方法。使用 PowerShell 操作 SQL Server 的方法有很多种,当您研究 Web 上的大量文章时,很容易感到困惑,因为它们都描述了不同的方法,即使是经验丰富的管理员也可能会有疑问。
使用 System.Data.OleDb 在 PowerShell 中进行 T-SQL 查询
由于 PowerShell 可以访问 .NET Framework 类,因此您可以使用 System.Data.OleDb 中的类来执行 T-SQL 查询。
以下是使用 System.Data.OleDb 类连接 SQL Server 的示例 PowerShell 脚本。让我们对 MS SQL 数据库中的表运行 SELECT 查询:
$dataSource = “lon-sql01\testdb”
$database = “master”
$sql = “SELECT * FROM sysdatabases”
$auth = “Integrated Security=SSPI;”
$connectionString = “Provider=sqloledb; ” +
“Data Source=$dataSource; “ +
“Initial Catalog=$database; “ +
“$auth; “
$connection = New-Object System.Data.OleDb.OleDbConnection $connectionString
$command = New-Object System.Data.OleDb.OleDbCommand $sql,$connection
$connection.Open()
$adapter = New-Object System.Data.OleDb.OleDbDataAdapter $command
$dataset = New-Object System.Data.DataSet
[void] $adapter.Fill($dataSet)
$connection.Close()
$rows=($dataset.Tables | Select-Object -Expand Rows)
echo $rows
以下是针对 MSSQL 数据库执行 INSERT/UPDATE/DELETE 查询的 PowerShell 脚本示例:
$dataSource = “lon-sql01\testdb”
$database = “test”
$sql = "insert into test_table (test_col) Values ('Test')"
$auth = “Integrated Security=SSPI;”
$connectionString = “Provider=sqloledb; ” +
“Data Source=$dataSource; ” +
“Initial Catalog=$database; ” +
“$auth; “
$connection = New-Object System.Data.OleDb.OleDbConnection $connectionString
$command = New-Object System.Data.OleDb.OleDbCommand $sql,$connection
$connection.Open()
$command = New-Object data.OleDb.OleDbCommand $sql
$command.connection = $connection
$rowsAffected = $command.ExecuteNonQuery()
这
$rowsAffected
变量包含添加或更改的行数。要运行更新或删除查询,只需更改 SQL 查询的行
$sql
多变的。
使用 System.Data.SqlClient 类在 PowerShell 中运行 SQL 查询
要从 PowerShell 访问 MS SQL Server,您可以使用另一个内置 .NET 类 - System.Data.SqlClient。以下是使用 SqlClient 在 PowerShell 脚本中执行 SELECT 查询的示例:
$server = "lon-sql01\testdb"
$database = "Test"
$sql = "select * from test_table"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$server;Database=$database;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $sql
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
INSERT/DELETE/UPDATE 查询的示例:
$server = "lon-sql01\testdb"
$database = "Test"
$sql = "insert into test_table (test_col) Values ('Test')"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$server;Database=$database;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $sql
$SqlCmd.Connection = $SqlConnection
$SqlConnection.Open()
$rowsAffected = $SqlCmd.ExecuteNonQuery();
$SqlConnection.Close()
注意。包含 SqlClient 类的代码与包含 OleDB 的代码非常相似。这些类的工作方式类似:
创建一个MSSQL服务器连接对象;
创建带有 SQL 查询的对象,并将连接对象分配给它;
然后,在运行 SELECT 查询的情况下,将创建一个适配器对象,并在该对象的上下文中执行查询;
-
在运行 INSERT/UPDATE/DELETE 查询的情况下,具有查询的对象(包含连接对象)执行
ExecuteNonQuery()
方法。
使用 SQL Server Management Studio 模块在 PowerShell 中进行 SQL 查询
要使用 Microsoft.SqlServer.Smo (SMO) 类,您的计算机上必须安装 SQL Server Management Studio 。
加载 SMO 模块,创建一个新的服务器对象,然后运行 SELECT 查询:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo");
$serverInstance = New-Object ('Microsoft.SqlServer.Management.Smo.Server') "lon-sql01\testdb"
$results = $serverInstance.Databases['test'].ExecuteWithResults('select * from test_table')
foreach ($res in $results.Tables) {
$nbsp;echo $res
}
对于插入/更新/删除查询,运行
ExecuteNonQuery
$db = $serverInstance.Databases['test']
$db.ExecuteNonQuery("insert into test_table (test_col) Values ('123456')")
注意。您还可以通过 NuGet 包管理器安装 SMO 库:
下载nuget.exe https://www.nuget.org/downloads;
以管理员身份运行PowerShell,进入nuget.exe所在目录;
跑步:
.\nuget.exe Install Microsoft.SqlServer.SqlManagementObjects
.
当前目录中将出现包含所有 DLL 的 Microsoft.SqlServer.SqlManagementObjects 文件夹;
将 SMO 库从 DLL 文件加载到 PowerShell 会话中。将其添加到您的脚本中:
add-type -Path "C:\Users\username\Downloads\Microsoft.SqlServer.SqlManagementObjects.150.18208.0\lib\net45\Microsoft.SqlServer.Smo.dll"
然后 SMO 课程就可以使用了。
从 SQLServer PowerShell 模块调用 Sqlcmd Cmdlet
要使用 Invoke-Sqlcmd cmdlet,请安装 SqlServer for PowerShell 模块。以管理员权限运行PowerShell并执行命令:
Install-Module -Name SqlServer
(按 Y,然后按 ENTER 接受安装程序通知。)
安装完成后,您可以通过运行以下命令来确保模块已正确安装:
Get-Module SqlServer -ListAvailable
与从 PowerShell 连接到 Microsoft SQL Server 的其他方式相比,Invoke-Sqlcmd cmdlet 更简单、更直观。 Invoke-Sqlcmd 对 SELECT 和 INSERT/UPDATE/DELETE 查询使用相同的语法。
以下是选择查询的示例:
Invoke-Sqlcmd -ServerInstance "lon-sql01\testdb" -Query "sp_who"
这是 INSERT 查询的示例:
Invoke-Sqlcmd -ServerInstance "lon-sql01\testdb" -Database "test1" -Query "insert into test_table (test_col) Values (‘123321’)"
与其他方法不同的是,查询
Invoke-Sqlcmd
始终设置在
-Query
范围。
您应该使用哪个 SQL 连接选项?
在 oledb/smo/sqlclient/invoke-sqlcmd 之间进行选择取决于任务以及要运行 PowerShell 脚本的环境。
如果您想将脚本部署到多个服务器(例如,您的脚本在本地收集监控数据),那么使用 SMO 或 SqlServer PowerShell 模块(Invoke-SQLcmd)是不合理的,因为您必须在远程主机上安装额外的软件包才能运行脚本,如果有很多服务器,最好避免使用。
反过来,SqlServer for PowerShell 模块提供了许多其他 cmdlet 来与 SQL Server 配合使用(您可以在此处了解更多信息:https://docs.microsoft.com/en-us/powershell/module/sqlserver)。该模块包含更多用于管理 SQL Server 本身的命令。
如果您的脚本将执行非管理任务(例如,负责业务逻辑的某些部分),则值得使用 System.Data.SqlClient/SMO,因为它们提供了更方便的开发工具。 OleDB 的一个优点是它不仅可以与 SQL Server 一起使用,还可以与 Access/Oracle/Firebird/Interbase 一起使用。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag