- PR -

VB.NETでBCPを使ったストアドが返ってこない

1
投稿者投稿内容
パクジン
ベテラン
会議室デビュー日: 2004/08/19
投稿数: 50
投稿日時: 2004-08-19 17:58
初めてスレを書きます。
どなたか分かる方がいればお教え下さい。

環境は、windows XP,SQL SERVER2000,.NET2003です。

VB.NETでストアド・プロシージャを呼び出しています。
そのストアドにはxp_cmdshellを使ってBCPでテキストにコピーしているのですが、
コピー元をグローバル一時テーブルにした際に.NET側でエラーも出ず、タイムアウトに
なるまで止まってしまいます。

VB.NET側
'DB接続
Call DB.DbConn(sql_Cn, ServerName, User, Pass)
'ストアドプロシージャにパラメータ出力
Dim cmd As SqlClient.SqlCommand = sql_Cn.CreateCommand
sql_Tran = sql_Cn.BeginTransaction()
With cmd
.CommandTimeout = 600
.CommandText = "SUTOADO"
.CommandType = CommandType.StoredProcedure
.Parameters.Clear()
.Parameters.Add("@HENSUU", SqlDbType.VARCHAR,50)
.Parameters("@HENSUU").Value = Hensuu
.Transaction = sql_Tran
End With
'ストアド実行
cmd.ExecuteNonQuery()

ストアドプロシージャ側
CREATE PROCEDURE SUTOADO
/*引数宣言*/
@HENSUU varchar(50),
AS
/*変数宣言*/
declare @cmd varchar(500)
declare @status int

BEGIN
--一時テーブルを作成する
select *
into ##TABLE_A
from TABLE_A
where a=@HENSUU

--発行するBcpコマンドを文字列で指定
set @cmd = ''
set @cmd = @cmd + 'Bcp ##TABLE_A out
C:\...\Text.txt -c -t, -r\n -Sservername -Uuser -Ppass
'BCP実行
execute @status=master..xp_cmdshell @cmd
End
GO

クエリアナライザで実行するとうまくいきます。
.NET側で呼び出した際、コピー元が実テーブルでもうまくいきます。

グローバル一時テーブルだとダメなのでしょうか。
また、何かが間違っているのでしょうか。
知っていらっしゃる方、教えて下さい。お願いします。



1

スキルアップ/キャリアアップ(JOB@IT)