Mysql 如何通过powershell使用SQL分隔符

Mysql 如何通过powershell使用SQL分隔符,mysql,database,powershell,delimiter,Mysql,Database,Powershell,Delimiter,我正试图读入一个由powershell执行的sql文件。一切正常,只是powershell由于单词分隔符而引发错误。 因此,我的问题是如何在我的sql文件中使用分隔符(我只能对sql文件进行微小更改,其代码必须保持相对不变),但如何通过powershell正确加载它 这是我从两个文件中得到的代码和错误。先谢谢你 Powershell: $sql = (Get-Content $pwd\NewClient.sql) | Out-String $cmd.CommandText = "USE $dbn

我正试图读入一个由powershell执行的sql文件。一切正常,只是powershell由于单词分隔符而引发错误。 因此,我的问题是如何在我的sql文件中使用分隔符(我只能对sql文件进行微小更改,其代码必须保持相对不变),但如何通过powershell正确加载它

这是我从两个文件中得到的代码和错误。先谢谢你

Powershell:

$sql = (Get-Content $pwd\NewClient.sql) | Out-String
$cmd.CommandText = "USE $dbname"
$cmd.ExecuteNonQuery()
$cmd.CommandText = $sql
$cmd.ExecuteNonQuery()
SQL:

使用“0”参数调用“ExecuteOnQuery”时出现异常:“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获取使用near”分隔符的正确语法//
第1行的“插入后创建触发器停止\u时间\u插入”

Powershell不支持分隔符关键字,但在这种情况下实际上不需要

你的

块将在没有分隔符的情况下工作,因为Powershell将整个命令视为单个项,而不是MySQL命令行界面如何将其视为多行集


因此,只要删除分隔符语句,就可以了。(在本地机器上测试。)

我意识到这是一个非常古老的线程,但我认为这是唯一一个涉及此主题的线程。回答的解决方案可以工作,但在MySQL命令提示符下运行时不能使用相同的脚本。我创建了一个PS函数,如下所示:

function executeScript([MySql.Data.MySqlClient.MySqlConnection]$conn, [String]$filePath)
{
    $fileName = Split-Path $filePath -Leaf
    Write-Host "Executing $fileName script"
    $sqlText = Get-Content $filePath | Out-String
    $sqlText = $sqlText.Replace("DELIMITER","-- DELIMITER")
    $sqlText = $sqlText.Replace('$$',";")
    return Invoke-MySql -sql $sqlText -connection $conn | Out-Null
}
DELIMITER $$
....
END $$
DELIMITER ;
假设SQL脚本如下所示:

function executeScript([MySql.Data.MySqlClient.MySqlConnection]$conn, [String]$filePath)
{
    $fileName = Split-Path $filePath -Leaf
    Write-Host "Executing $fileName script"
    $sqlText = Get-Content $filePath | Out-String
    $sqlText = $sqlText.Replace("DELIMITER","-- DELIMITER")
    $sqlText = $sqlText.Replace('$$',";")
    return Invoke-MySql -sql $sqlText -connection $conn | Out-Null
}
DELIMITER $$
....
END $$
DELIMITER ;
调用MySql来自Mike Shepard的MySQLLib包


现在,可以从两种环境执行相同的脚本文件。

您可以发送SQL代码吗?另外,我认为use语句不会对第二次调用ExecuteOnQuery产生任何影响。很抱歉不知道,但是我如何向您发送代码?我做了一个快速搜索,发现SO没有PM选项。我应该把代码粘贴在这里吗?对不起,我第一次误解了这个问题。我猜这个问题与两个系统之间的线路终端有关。我猜mysql在一行上拾取了“delimiter//create trigger…”,这导致了语法错误。我不知道如何解决这个问题。谢谢你提供了一个更通用(尽管有点粗糙)的解决方案!