用于验证 sql 语法错误的 Powershell 脚本
Posted
技术标签:
【中文标题】用于验证 sql 语法错误的 Powershell 脚本【英文标题】:Powershell script to validate sql syntax errors 【发布时间】:2019-03-22 07:51:10 【问题描述】:是否有任何检测 sql 语法错误的 powershell 语法?例如存储过程、SQL查询、函数等
【问题讨论】:
您正在寻找像rextester.com/l/sql_server_online_compiler这样的在线SQL编译器 是的。需要一个用 powershell 编写的语法验证器来验证语法错误。 您使用的是哪个 RDBMS?有关 SQL Server 解决方案,请参阅earlier a question。 微软 sql 服务器 您需要为此编写一个 SQL 解析器(无论您使用的是什么 DBMS),这显然 方式 超出了 SO 问题的范围。 【参考方案1】:您可以使用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://***.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 语法错误的 Powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章
为啥安装sql Server 2008时总是显示windows powershell错误?