全体として、大きな 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 ファイルに書き込み、概説した方法を使用して実行し、終了したら削除するという計画でした。