用于验证 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】:

您可以使用PARSEONLYNOEXEC 包装您的查询,这是一个示例:

$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 脚本的主要内容,如果未能解决你的问题,请参考以下文章

错误:PowerShell 模块中的安装包验证码颁发者

为啥安装sql Server 2008时总是显示windows powershell错误?

验证文件是不是为 SQL 或验证其语法

用于合并到 SQL 的 Azure 突触合并语法错误

powershell 使用powershell创建用于测试SQL的Azure VM

符合多个数据库的在线 SQL 语法检查器 [关闭]