2012-05-31 5 views
3

PowerShell에서 실행할 SQL 파일을 읽으려고합니다. Powershell이 ​​단어 분리 문자로 인해 오류를 발생시키는 것을 제외하고는 모두 잘 작동합니다. 그래서 내 질문에 대한 구분 기호를 사용하여 내 SQL 파일을 (나는 단지 사소한 변경을 할 수있는 SQL 파일, 그 코드는 상대적으로 변경하지 않고 유지해야합니다)하지만 제대로 powershell을 통해로드.powershell을 통해 SQL 구분 기호를 사용하는 방법

두 파일에서 Heres 내 코드와 나는 오류가 발생합니다. 미리 감사드립니다.

파워 쉘 :

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

SQL :

delimiter // 
...... 
end;// 
delimiter ; 

예외가 "0"인수 (들) "ExecuteNonQuery는"을 호출 : "당신은 당신의 SQL 구문에 오류가있다; 설명서를 확인하는 올바른 구문이 'Delimiter'근처에서 사용하도록 MySQL 서버 버전에 해당합니다 // 1 번 줄에서 'stop'insert after stop '1 행에서 "

+0

SQL 코드를 보낼 수 있습니까? 또한 use 문이 ExecuteNonQuery에 대한 두 번째 호출에 영향을 미치지 않을 것이라고 생각합니다. –

+0

무지로 죄송하지만 어떻게 코드를 보내 주시겠습니까? 나는 빠른 검색을 수행 했으므로 SO에 PM 옵션이 없음을 알았습니다. 여기에 코드를 붙여 넣어야합니까? – G3TH

+0

죄송합니다. 처음 질문을 오해했습니다. 문제는 두 시스템 사이의 줄 종결 자와 관련이 있다고 생각합니다. 내 생각 엔 mysql "delimiter // trigger를 생성한다." 한 줄에 구문 오류가 발생합니다. 이 문제를 해결하는 방법을 모르겠습니다. –

답변

1

Powe rshell은 Delimiter 키워드를 지원하지 않지만이 경우에는 실제로 필요하지 않습니다. 파워 쉘 대신 MySQL의 명령 줄 인터페이스가 여러 세트로 처리하는 방법의 하나의 항목으로 전체 명령을 취급하기 때문에

귀하의

create trigger stop_time_insert after insert on stops 
begin 
    //do stuff 
end; 

블록은 구분 기호없이 작동합니다.

그래서 구분 문자를 제거하면됩니다. (여기에 로컬 시스템에 대해 테스트했습니다.)

+0

고맙습니다. 이 솔루션은 효과가있었습니다. – G3TH

4

이 스레드는 매우 오래된 것으로 알고 있지만이 주제를 다루는 유일한 스레드라고 생각합니다. 응답 된 솔루션은 작동하지만 MySQL 명령 프롬프트에서 실행할 때 동일한 스크립트를 사용할 수는 없습니다. 다음과 같이

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 
} 

는 SQL 스크립트를 가정 :

DELIMITER $$ 
.... 
END $$ 
DELIMITER ; 

호출 - MySQL은 마이크 셰퍼드의 MySQLLib 패키지에서입니다 다음과 같이 나는 PS 기능을 만들었습니다.

이제 동일한 스크립트 파일을 두 환경에서 모두 실행할 수 있습니다.

+0

좀 더 일반적인 (해트닝이지만) 솔루션을 제공해 주셔서 감사합니다! – ysalmi

관련 문제