使用Powershell从sql表中获取值

时间:2015-05-30 07:14:23

标签: sql-server windows powershell

我们知道我们可以使用sql查询窗口从数据库中获取值“select * from....”。有没有办法通过powershell方式获得价值。我找到了数据库表本身的方法,但没有找到值..

前:

Set-location SQLserver:\sql\default\localhost\databases\database\tablesGet-childitem 

上面的命令为我提供了数据库中的表,但是如何从中获取值。

6 个答案:

答案 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>