Есть ли какой-либо синтаксис powershell, который обнаруживает синтаксические ошибки sql? Например, хранимые процедуры, SQL-запрос, функции и т. д.
Да . нужен синтаксический валидатор, написанный на powershell, который будет проверять синтаксические ошибки.
Какую СУБД вы используете? Для решения SQL Server см. ранее вопрос.
sql-сервер майкрософт
Для этого вам нужно написать синтаксический анализатор SQL (независимо от того, какую СУБД вы используете), что явно способ выходит за рамки вопроса SO.
Вы можете обернуть свой запрос 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
Ссылка: https://stackoverflow.com/a/3276146/3759822
ОБНОВИТЬ :
Если вы хотите проверить запросы внутри файлов .sql
, запустите скрипт из каталога, содержащего скрипты.
Get-ChildItem .\*.sql | Select -ExpandProperty FullName | ForEach { $query = (Get-Content -Path $_); Check-Query-Syntax $str }
Привет, ценю ваши усилия. В основном я пытаюсь проверить ошибки не через серверы sql или что-то еще. У меня есть сценарии sql в моей папке. Мне нужно, чтобы проверить каждый файл в папке.
Да .. спасибо за это . Разве это невозможно без передачи данных базы данных и т.д.? Есть ли доступное пространство имен, которое будет работать для отображения ошибок?
@aishwaryamurali вам нужно подключение к серверу базы данных SQL Server, чтобы проверить запрос, потому что он выполняется на стороне сервера. Что вы подразумеваете под «Есть ли доступное пространство имен, которое будет работать для отображения ошибок?» ?
Вы ищете онлайн-компилятор SQL, такой как rextester.com/l/sql_server_online_compiler