問題タブ [invoke-sqlcmd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - csvファイルからinvoke-sqlcmd挿入ステートメントに配列変数を渡す値がありませんか?
私は PowerShell を学んでいます。.CSV
ファイルを SQL Server データベースにインポートしようとするスクリプトを作成しましたが、次のクエリがテーブルを追加しているだけであることがわかりました。
そのため、最初のTRUNCATE
前INSERT
に、次の 2 つのスクリプトをテストしました。
これらのスクリプトをテストした後、ページの上部にある元のスクリプトを使用すると、テーブルは.CSV
挿入から同じ数のレコードを返しますが、現在はすべて空白であり、これら 2 つを個別にテストする前はそうではありませんでしたTRUNCATE
スクリプト (ファイルの各レコードにはまだ同じ値があります):
PowerShell からオブジェクトをクエリすると、 select-object コマンドがすべての空のレコードを返すように見えます。
ただし、Import-CSV は、ファイルに存在する値を返します。
他の SQL ステートメントをテストしてリテラル SQL 文字列を挿入すると、 を使用してテーブルに書き込むことができるように見えますinvoke-sqlcmd
が、(間違っている可能性があります) powershell がファイルから読み取っているオブジェクト値を何とか切り捨てました。値はまだファイルにあります。
どうにかして PowerShell を復元する必要がありますか、それともファイル システムを何らかの形で変更したのでしょうか?
また、次のスクリプトを使用して SQL からまったく同じファイルを照会できるため、明らかに値を読み取ることができますが、PowerShell スクリプトは何らかの理由で import-csv コマンドを使用して値を読み取ることができません。
powershell - PowerShell を使用して CSV から SQL テーブルにデータを行単位で挿入する
CSV
したがって、複数のファイルから複数の にデータを挿入する必要があるこの特定のシナリオがありますSQL tables
。行ごとにデータを挿入するこのSOリンクに出くわしました。以下はリンクからのコードスニペットです -
私が直面している問題は、CSVs
列の数が異なる複数の列があることです。そのため、コード スニペットをハードコーディングするオプションはVALUES('$($_.Column1)','$($_.Column2)')
存在しません。
さらに、100 を超える列を含むテーブルがあります。したがって、書き込みVALUES('$($_.Column1)','$($_.Column2)')... so on upto '$($_.Column100)'
も実行できません。
同じために私が行ったことは、列名を次のCSVs
ようにPowerShell配列に保存することです-
現在$csvColumnNames
、テーブルのすべての列名がありALL_EMAILS
ます。私はそれを解決策に合わせようとしています -
しかし、うまくいかないようです。私はかなり長い間これに苦労しており、アイデアが不足しています。新鮮な目は大歓迎です。
powershell - AzureSQL の複数の Invoke-SQLCmd ループと接続エラー
Azure Automation を介して、複数の AzureSQL データベースに対して invoke-sqlcmd をループしようとしています。ループの最初の項目は実行されますが、残りはすべて次のエラーで失敗します。
Invoke-Sqlcmd : SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした)
次を実行する前に、最初のinvoke-sqlcmdからの接続を閉じる必要があると推測していますが、invoke-sqlcmdでそれを達成するための直接的な方法は見つかりませんでした. ここに私のループがあります: