我们知道我们可以使用sql查询窗口从数据库中获取值“select * from....
”。有没有办法通过powershell方式获得价值。我找到了数据库表本身的方法,但没有找到值..
前:
Set-location SQLserver:\sql\default\localhost\databases\database\tablesGet-childitem
上面的命令为我提供了数据库中的表,但是如何从中获取值。
答案 0 :(得分:4)
最简洁明了的选项是Invoke-SqlCommand
$results = Invoke-Sqlcmd -ServerInstance "mySqlServer" -Database "myDatabase" -Query "SELECT * FROM MyTable"
答案 1 :(得分:3)
您可以使用此
$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$query = “SELECT * FROM Tab”
$command = $connection.CreateCommand()
$command.CommandText = $query
$result = $command.ExecuteReader()
答案 2 :(得分:2)
你的意思是powershell命令如下:
$MyVar = New-Object Microsoft.SqlServer.Management.SMO.Table
$MyVar | Get-Member -Type Properties
有关详细信息,请访问https://technet.microsoft.com/en-us/library/cc281939(v=sql.105).aspx
如果你想得到table的值,
//Connect to the local, default instance of SQL Server.
{
Server srv = default(Server);
srv = new Server();
//Call the EnumCollations method and return collation information to DataTable variable.
DataTable d = default(DataTable);
//Select the returned data into an array of DataRow.
d = srv.EnumCollations;
//Iterate through the rows and display collation details for the instance of SQL Server.
DataRow r = default(DataRow);
DataColumn c = default(DataColumn);
foreach ( r in d.Rows) {
Console.WriteLine("=====================================");
foreach ( c in r.Table.Columns) {
Console.WriteLine(c.ColumnName + " = " + r(c).ToString);
}
}
}
以上是如何通过C#完成工作,但如何在powershell中执行此操作:您已获得$ MyVar值,并且您运行“$ MyVar | Get-Member”将显示所有可用于$的方法的所有方法MyVar,我相信应该有一些方法允许你为thr表的所有行或列迭代。 powerShell甚至可以调用C#方法,但这是最后一个选择。
答案 3 :(得分:2)
SQL Server Powershell提供程序使用SMO公开数据库对象层次结构。获得SMO子项后,可以在对象上调用相应的SMO方法。
SMO数据库ExecuteQueryWithResults方法可用于在给定数据库的上下文中执行查询。获取所需的数据库项并调用此方法以返回包含结果的DataSet对象。然后根据需要从DataSet中检索数据。
以下是从SMO引用((https://msdn.microsoft.com/en-us/library/ms205775.aspx)收集的示例,该引用可以从“数据库”节点的上下文运行:
$db = Get-Item SomeDatabase
$dt = $db.ExecuteWithResults("SELECT * FROM sys.objects;")
$dt.Tables[0] | Format-Table
答案 4 :(得分:1)
您可以在SQLPSX(SQLPSX.codeplex.com)中使用AdoLib模块。
有了这个,您可以使用cmdlet并执行以下操作:
invoke-sqlquery -sql "select * from tab" -server SQLServer01 -database MyDatabase
答案 5 :(得分:0)
现在为powershell
提供了一个sqlserver模块available
您现在可以使用以下两个附加命令和选项
Read-SqlTableData [[-ServerInstance] <String[]> ] [-ColumnName <String[]> ] [-ColumnOrder <String[]> ] [-ColumnOrderType <OrderType[]> ] [-ConnectionTimeout <Int32> ] [-Credential <PSCredential> ] [-DatabaseName <String> ] [-IgnoreProviderContext] [-OutputAs <OutputTypeSingleTable> {DataSet | DataTable | DataRows} ] [-SchemaName <String> ] [-SuppressProviderContextWarning] [-TableName <String> ] [-TopN <Int64> ] [ <CommonParameters>]
Write-SqlTableData [[-ServerInstance] <String[]> ] -InputData <PSObject> [-ConnectionTimeout <Int32> ] [-Credential <PSCredential> ] [-DatabaseName <String> ] [-Force] [-IgnoreProviderContext] [-Passthru] [-SchemaName <String> ] [-SuppressProviderContextWarning] [-TableName <String> ] [-Timeout <Int32> ] [ <CommonParameters>