1

全体として、大きな SQL テーブルから .txt ファイルにデータ セットを書き込む必要があります。これを行うために、xp_cmdshell を使用することにしました。Data.txt ファイルを作成するために使用したクエリは次のとおりです。

declare @sql varchar(8000) 
select @sql = 'bcp "SELECT /*Lots of field names here*/ ' +
'FROM [SomeDatabase]..TableName WHERE /*Some Long Where Clause*/" ' + 
'queryout "M:\\SomeDir\\SomeOtherDirectory\\Data.txt" -c -t -T -S' + @@servername 
exec master..xp_cmdshell @sql

私が抱えている問題は、SELECT使用しているクエリが、コマンド ラインによって課された 1024 文字の制限を超えていることです。これを回避するためにsqlcmd、ファイルから必要な SQL クエリを実行しようと試み、クエリの長​​さでエラーを排除することにしました。次のクエリを試しました

DECLARE @DatabaseName VARCHAR(255)
DECLARE @cmd VARCHAR(8000)
SET @DatabaseName = 'SomeDatabase' 
SET @CMD = 'SQLCMD -E -S (localhost) -d ' + @DBName + 
    'i "M:\\SomeDir\\SomeOtherDirectory\\tmpTestQuery.sql"' 
EXEC master..xp_cmdshell @CMD 

ここで、「tmpTestQuery.sql」には実行したい長いクエリが含まれていますが、次のエラーが発生します

HResult 0x2AF9, Level 16, State 1
TCP Provider: No such host is known.
NULL
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : A network-related or instance-
    specific error has occurred while establishing a connection to SQL Server. 
    Server is not found or not accessible. Check if instance name is correct and 
    if SQL Server is configured to allow remote connections. 
    For more information see SQL Server Books Online..
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : Login timeout expired.
NULL

リモート接続を有効にしています。

私が間違っていることを知りたいのですが、xp_cmdshell を使用するときにクエリの長​​さで発生している問題を回避する別の方法がある場合は?

御時間ありがとうございます。

ノート。このクエリは最終的に C# から呼び出されるため、非常に長いクエリを一時的な .txt ファイルに書き込み、概説した方法を使用して実行し、終了したら削除するという計画でした。

4

2 に答える 2

2

BCP の制限を回避する 1 つの方法は、複雑なクエリをビューまたはストアド プロシージャでラップし、BCP コマンドでそのオブジェクトをクエリすることです。

括弧で囲まれているため、SQLCMD が機能しない場合がありますlocalhost。試す:

...
SET @CMD = 'SQLCMD -E -S localhost -d ' + @DBName + 
...
于 2012-06-12T10:53:42.317 に答える
1

必要なデータをグローバル一時テーブル ( ##temp_table) に挿入し、それをソースとして使用できます。

declare @sql varchar(8000) 
select @sql = 'bcp "SELECT * FROM ##temp_table" ' + 
'queryout "M:\\SomeDir\\SomeOtherDirectory\\Data.txt" -c -t -T -S' + @@servername 
exec master..xp_cmdshell @sql
于 2012-06-12T10:51:43.613 に答える