Вы можете заключить запрос в PARSEONLY
или NOEXEC
, вот пример:
$Server = "SERVER"
$Database = "Database"
$UserId = "USERID"
$Password = "PASSWORD"
$QueryToTest= "SELECT * FROM NO_TABLE !!"
Function Check-Query-Syntax
{
Param(
[Parameter(Mandatory = $true)][string]$query
)
try
{
$sb = New-Object -TypeName "System.Text.StringBuilder"
[void]$classpath.AppendLine("SET NOEXEC ON;")
[void]$classpath.AppendLine($query)
[void]$classpath.AppendLine("SET NOEXEC OFF;")
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "server='$Server';database='$Database';User Id='$UserId';Password='$Password';trusted_connection=true;"
$Connection.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$Command.CommandText = $SQLQuery
$Reader = $Command.ExecuteNonQuery()
$Connection.Close()
}
catch
{
Write-Host "Some error"
throw
}
}
Check-Query-Syntax $QueryToTest
PARSEONLY NOEXEC
Справка: https://stackoverflow.com/a/3276146/3759822
ОБНОВЛЕНИЕ :
Если вы хотите проверить запросы в файлах .sql
, выполните сценарий из каталога, содержащего сценарии * 1020.*
Get-ChildItem .\*.sql | Select -ExpandProperty FullName | ForEach { $query = (Get-Content -Path $_); Check-Query-Syntax $str }