Để trả lời câu hỏi
Nếu một số lỗi hoặc ngoại lệ xảy ra khi thực hiện tập tin sql làm thế nào tôi có thể nhận được rằng vào kịch bản PowerShell của tôi? Làm thế nào tôi có thể nhận được đầu ra kịch bản?"
Invoke-Expression
trả về kết quả của biểu thức thực hiện. Tuy nhiên, nó chỉ có thể chụp STDOUT
, không STDERR
(Tôi đã không kiểm tra, như tôi đã không sử dụng phương pháp này) , vì vậy bạn có thể không nhận được thông báo lỗi thực tế
Từ Trợ giúp:.
lệnh Invoke-biểu đánh giá hoặc điều hành một chuỗi quy định như một lệnh và trả về kết quả của biểu thức hay lệnh
Tuyến đường tốt hơn là sử dụng phương pháp PowerShell bạn đã có sẵn - Invoke-SQLCmd
được cài đặt nếu bạn đã cài đặt bất kỳ thành phần/công cụ SQL Server 2008 (hoặc mới hơn) (như SSMS). Nếu bạn đã có SQL Server 2012, nó rất dễ dàng: import-module sqlps
. Trong năm 2008, bạn cần thêm một Snap-In, add-pssnapin SqlServerCmdletSnapin
. Và vì bạn có sqlcmd.exe
, các thành phần PowerShell sẽ có sẵn.
Nếu vẫn thất bại, đi theo tuyến đường System.Data.SQLClient
:
$Conn=New-Object System.Data.SQLClient.SQLConnection "Server=YOURSERVER;Database=TestDB;User Id=$user;password=$pw";
$Conn.Open();
$DataCmd = New-Object System.Data.SqlClient.SqlCommand;
$MyQuery = get-content "e:\SQLQuery1.sql";
$DataCmd.CommandText = $MyQuery;
$DataCmd.Connection = $Conn;
$DAadapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$DAadapter.SelectCommand = $DataCmd;
$DTable = New-Object System.Data.DataTable;
$DAadapter.Fill($DTable)|Out-Null;
$Conn.Close();
$Conn.Dispose();
$DTable;
Với cả hai này và Invoke-SQLCmd
, bạn sẽ có thể sử dụng try/catch
để nhận và xử lý bất kỳ lỗi xảy ra.
Tại sao các bạn sử dụng 'Gọi-Expression'? Chỉ cần gọi sqlcmd như bình thường. 'PS> sqlcmd.exe -d TestDB -U $ người dùng -P $ pw -I E: \ SQLQuery.sql1'. Nếu bạn thấy "lỗi hoặc ngoại lệ", vui lòng đăng toàn bộ nội dung của lỗi hoặc ngoại lệ này. – latkin
Bạn cũng có thể giải thích lý do tại sao bạn không thể sử dụng invoke-sqlcmd. Có thể có một cách giải quyết khác. – noam
+1 khi cần giải thích về 'invoke-sqlcmd'.IIRC, nếu bạn có một hệ thống nơi 'sqlcmd' được cài đặt, bạn cũng sẽ có' invoke-sqlcmd' (miễn là nó là công cụ từ SQL Server 2008+) – alroc