복붙노트

[SQL] 어떻게 PowerShell을에서 SQL Server 쿼리를 실행합니까?

SQL

어떻게 PowerShell을에서 SQL Server 쿼리를 실행합니까?

내 로컬 컴퓨터에 PowerShell을 사용하여 SQL 서버에 임의의 쿼리를 실행하는 방법이 있나요?

해결법

  1. ==============================

    1.다만 재고 .NET 및 PowerShell을 (추가 SQL 도구가 설치되어 있지) 여기에이 작업을 수행 할 필요가 다른 사람을 위해 내가 사용하는 기능은 다음과 같습니다

    다만 재고 .NET 및 PowerShell을 (추가 SQL 도구가 설치되어 있지) 여기에이 작업을 수행 할 필요가 다른 사람을 위해 내가 사용하는 기능은 다음과 같습니다

    function Invoke-SQL {
        param(
            [string] $dataSource = ".\SQLEXPRESS",
            [string] $database = "MasterData",
            [string] $sqlCommand = $(throw "Please specify a query.")
          )
    
        $connectionString = "Data Source=$dataSource; " +
                "Integrated Security=SSPI; " +
                "Initial Catalog=$database"
    
        $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
        $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
        $connection.Open()
    
        $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
        $dataset = New-Object System.Data.DataSet
        $adapter.Fill($dataSet) | Out-Null
    
        $connection.Close()
        $dataSet.Tables
    
    }
    

    나는 너무 오래 내가 어떤 부분을 썼다 그러나 이것은의 다른 예에서 증류수하지만 명확하게 단순화하고 단지 어떤 추가 의존성 또는 기능없이 필요한 누가 모르는이 사용하고있다.

    내가 사용하고 자주 당신은 지금 당신의 모듈 디렉토리로 이동하여 자식 복제 https://github.com/ChrisMagnuson/InvokeSQL을 실행하고 invoke- 그 시점에서 할 수 있도록 내가 GitHub의에서 스크립트 모듈에이를 켰는 지이 공유 당신이 (당신이 PowerShell을 v3의 이상을 사용하는 가정)을 사용하는 갈 때 SQL이 자동으로로드됩니다.

  2. ==============================

    2.당신은 호출-SQLCMD cmdlet을 사용할 수 있습니다

    당신은 호출-SQLCMD cmdlet을 사용할 수 있습니다

    Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"
    

    http://technet.microsoft.com/en-us/library/cc281720.aspx

  3. ==============================

    3.여기에 내가이 블로그에서 발견 예입니다.

    여기에 내가이 블로그에서 발견 예입니다.

    $cn2 = new-object system.data.SqlClient.SQLConnection("Data Source=machine1;Integrated Security=SSPI;Initial Catalog=master");
    $cmd = new-object system.data.sqlclient.sqlcommand("dbcc freeproccache", $cn2);
    $cn2.Open();
    if ($cmd.ExecuteNonQuery() -ne -1)
    {
        echo "Failed";
    }
    $cn2.Close();
    

    아마도 당신은 DBCC의 FREEPROCCACHE을 말한다 다른 TSQL 문을 대체 할 수 있습니다.

  4. ==============================

    4.쉽게 필터 및 액세스 열에서 사용할 수 있도록 파워 쉘의 배열로 쿼리의 결과를 반환합니다이 기능은 객체 :

    쉽게 필터 및 액세스 열에서 사용할 수 있도록 파워 쉘의 배열로 쿼리의 결과를 반환합니다이 기능은 객체 :

    function sql($sqlText, $database = "master", $server = ".")
    {
        $connection = new-object System.Data.SqlClient.SQLConnection("Data Source=$server;Integrated Security=SSPI;Initial Catalog=$database");
        $cmd = new-object System.Data.SqlClient.SqlCommand($sqlText, $connection);
    
        $connection.Open();
        $reader = $cmd.ExecuteReader()
    
        $results = @()
        while ($reader.Read())
        {
            $row = @{}
            for ($i = 0; $i -lt $reader.FieldCount; $i++)
            {
                $row[$reader.GetName($i)] = $reader.GetValue($i)
            }
            $results += new-object psobject -property $row            
        }
        $connection.Close();
    
        $results
    }
    
  5. ==============================

    5.당신이 당신의 로컬 컴퓨터 대신 SQL 서버의 맥락에서 그것을하고 싶은 경우에 나는 다음을 사용합니다. 그것은 우리가 내 회사에서 사용하는 것입니다.

    당신이 당신의 로컬 컴퓨터 대신 SQL 서버의 맥락에서 그것을하고 싶은 경우에 나는 다음을 사용합니다. 그것은 우리가 내 회사에서 사용하는 것입니다.

    $ServerName = "_ServerName_"
    $DatabaseName = "_DatabaseName_"
    $Query = "SELECT * FROM Table WHERE Column = ''"
    
    #Timeout parameters
    $QueryTimeout = 120
    $ConnectionTimeout = 30
    
    #Action of connecting to the Database and executing the query and returning results if there were any.
    $conn=New-Object System.Data.SqlClient.SQLConnection
    $ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerName,$DatabaseName,$ConnectionTimeout
    $conn.ConnectionString=$ConnectionString
    $conn.Open()
    $cmd=New-Object system.Data.SqlClient.SqlCommand($Query,$conn)
    $cmd.CommandTimeout=$QueryTimeout
    $ds=New-Object system.Data.DataSet
    $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
    [void]$da.fill($ds)
    $conn.Close()
    $ds.Tables
    

    그냥 $ 서버 이름, $ 데이터베이스 이름과 $ 쿼리 변수를 입력하고 갈 수 있어야합니다.

    나는 확실히 우리가 처음이 밖으로 발견하는 방법 아니지만, 여기에 매우 비슷한있다.

  6. ==============================

    6.

    Invoke-Sqlcmd -Query "sp_who" -ServerInstance . -QueryTimeout 3
    
  7. ==============================

    7.SQL 쿼리를 실행 내장 된 "PowerShell을"방법이 없습니다. 당신은 SQL Server 도구가 설치되어있는 경우, 당신은 호출-SQLCMD cmdlet를 얻을 수 있습니다.

    SQL 쿼리를 실행 내장 된 "PowerShell을"방법이 없습니다. 당신은 SQL Server 도구가 설치되어있는 경우, 당신은 호출-SQLCMD cmdlet를 얻을 수 있습니다.

    PowerShell을이 .NET에 내장되어 있기 때문에, 당신은 당신의 쿼리를 실행하기 위해 ADO.NET API를 사용할 수 있습니다.

  8. from https://stackoverflow.com/questions/8423541/how-do-you-run-a-sql-server-query-from-powershell by cc-by-sa and MIT license