私は一日中、答えを求めてネットを探し回っています。どうやら tsql には、独自の気の利いたファイルへの書き込みコマンドがありません。ここに私のジレンマがあります
1 行の長さが 10K+ に達するロード ファイルを作成しています。SQL Server の varchar(MAX) 制限は 8000 であるため (私は信じています)、これらの行をいくつかの変数に分割しました。PRINT を実行しようとしましたが、ウィンドウ ペインでは 4000 が許可されています。回避策は、これらの壊れた行を一度に 1 つの変数で出力することですが、手作業では面倒になる可能性があるため、変数を 1 つずつ txt ファイルに書き込むことを検討することにしました。時間。
xpcommandshell を介して BCP を調べたところ、有望に見えました。問題は、この行をコマンド プロンプトで機能させることができたにもかかわらず、まったく同じ行が TSQL クエリで機能しないことでした。
declare @cmd varchar(8000)
select @cmd = 'bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T'
exec master..xp_cmdshell @cmd
bcp Client_DB "Select name from dbo.t_TagBuild_set" queryout "Desktop\LAMB\dummy.txt" -c -t, -T
コマンドプロンプトで完全に正常に動作します
このわずかな進歩にもかかわらず、私のマネージャーはその道を進みたがりませんでした。その代わりに、SQL で次の行を実行して sp_configure を有効にした後、sp_OACreate と sp_OAMethod を選択しました。 sp_configure 'Ole Automation Procedures', 1
このルートの最初の行の 1 つがこれです。
EXECUTE @hr = sp_OACreate 'Scripting.FileSystemObject' , @objFileSystem OUT
@hr は 0 を与えるので、それは良いことですが、@objFileSystem は 16711422 を生成し、@hr は最終的に -2146828218 になり、これはパーミッションだと思います。
私は本当に簡単なことを見つけることに途方に暮れていますが、新しい行を追加してプロセスを繰り返す前に、いくつかの変数に続けて書き込むためだけに具体的なものを見つけるのがますます難しくなっています。
誰かが BCP または sp_OACreate を理解するのを専門的に手伝ってくれるなら、ネットがほとんど役に立たないので、私は非常に感謝しています (そして、これは私が Microsoft 自身のサイトを見て答えを探すのに多くの時間を費やした後です)