Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मैं एक win32 कमांड (sqlcommand) कैसे बना सकता हूं, इसके आउटपुट को PowerShell में कंसोल पर प्रिंट करें

यहां बताया गया है कि मैंने इसे अतीत में कैसे किया है, यह StandardOut और StandardError की घटनाओं का उपयोग करता है। चूंकि इन्हें अतुल्यकालिक रूप से निष्पादित किया जाता है, इसलिए आप पूरी तरह से आउटपुट के नियंत्रण में नहीं होते हैं (जब ऐसा होता है), लेकिन यह आपकी आवश्यकता के करीब होना चाहिए।

$SqlCommandArguments = @()
$SqlCommandArguments += "-S $DbHost"
$SqlCommandArguments += "-d $DbSchema"
$SqlCommandArguments += "-Q `"do some crazy db change here`""
ExecuteProcess -FileName "SqlCmd.exe" -CommandArguments $SqlCommandArguments -Verbose:$VerbosePreference

function ExecuteProcess
{
    [cmdletbinding()]
    param
    (
        [string]$FileName,
        [string[]]$CommandArguments
    )

    Write-Verbose "$FileName $CommandArguments"

    $startInfo = New-Object System.Diagnostics.ProcessStartInfo
    $startInfo.FileName = $FileName
    $startInfo.Arguments = $CommandArguments
    $startInfo.RedirectStandardError = $true
    $startInfo.RedirectStandardOutput = $true
    $startInfo.UseShellExecute = $false
    $startInfo.CreateNoWindow = $true

    $process = New-Object System.Diagnostics.Process
    $process.StartInfo = $startInfo

    $eventOutputDataReceived = Register-ObjectEvent -InputObject $process -EventName OutputDataReceived -MessageData $VerbosePreference -Action { 
        if ($($EventArgs.data))
        {
            Write-Verbose $EventArgs.data -verbose:$event.MessageData
        }
    }

    $global:standardError = New-Object System.Text.StringBuilder
    $eventErrorDataReceived = Register-ObjectEvent -InputObject $process -EventName ErrorDataReceived  -Action { 
        if ($($EventArgs.data))
        {
            $global:standardError.Append("$($EventArgs.data)`r`n")
            Write-Warning -message $EventArgs.data 
        }
    } 

    $process.Start() | Out-Null

    $process.BeginOutputReadLine()
    $process.BeginErrorReadLine()  

    $process.WaitForExit()


    Unregister-Event -SourceIdentifier $eventOutputDataReceived.Name 
    Unregister-Event -SourceIdentifier $eventErrorDataReceived.Name 

    $exitCode = $process.ExitCode
    if ($exitCode -ne 0) 
    {
        Write-Error $global:standardError.ToString()
        throw "$FileName Failed!"
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि - वर्तमान कनेक्शन से जुड़ा लेनदेन पूरा हो गया है लेकिन निपटारा नहीं किया गया है

  2. एसपी 15 मिनट लेता है, लेकिन निष्पादित होने पर वही प्रश्न 1-2 मिनट में परिणाम देता है

  3. SSRS सब्सक्रिप्शन ईमेल को डुप्लिकेट करना

  4. एसक्यूएल पहेली, भाग के लिए नवीनतम तिथि का चयन कैसे करें, लेकिन प्रति भाग केवल 1 पंक्ति (अद्वितीय)

  5. SQL सर्वर में संदर्भित निकाय खोजें:sys.dm_sql_referenced_entities