2

マシンのローカル DB にあるすべてのユーザー テーブルを取得する proc を作成しました。BCP と SQL を使用して、すべてのテーブルのフラット ファイルを作成できるようにしたいと考えています。Windows認証を介して接続するSQL 2000のダミーデータベースです。WinXP SP2 で環境パス変数を設定しました。信頼できる接続を使用して、データベースにアクセスするための新しいユーザーを作成し、ファイアウォールをオフにしました。私は何十ものフォーラムを試しましたが、うまくいきませんでした。

dosコマンドプロンプトで同じエラーが発生します。

SQLState = 37000、NativeError = 4060 エラー = [Microsoft][ODBC SQL Server Driver][SQL Server] ログイン '[HelpDesk-EasyPay' で要求されたデータベースを開けません。ログインに失敗します。

ここに私のSPがあります:

@Path VARCHAR(100),
    @UserName VARCHAR(15),
    @PassWord VARCHAR(15),
    @ServerName VARCHAR(15)
AS 

set quoted_identifier off
set nocount on

declare @n int
declare @db varchar(40)
set @db=DB_NAME()
declare @TableName varchar(15) 
declare @bcp varchar(200)
select identity(int,1,1) as tblNo,name tblname into #T from Sysobjects where xtype='u'
select @n=COUNT(*) from #T

WHILE (@n>0)
BEGIN
    SELECT @TableName=tblname FROM #T WHERE tblno=@n
    PRINT 'Now BCP out for table: ' + @TableName
    SET @bcp = "master..xp_cmdshell 'BCP " + "[" + @db + ".." + @TableName + "]" + " OUT" + @Path + "" + @TableName+".txt -c -U" + @UserName + " -P" + @PassWord + " -S" + @ServerName + " -T" + "'" 
    EXEC(@bcp)
    SET @n=@n-1
END

DROP TABLE #T

誰でもアドバイスできますか。これは接続の問題または BCP のようです。わからない。

編集:フラット ファイルに出力するテーブルが 118 個あるため、これをクエリ アナライザーから実行しています。ユーザー名saパスワードrootでマスターdbに接続しようとしたため、認証の問題であることに同意しているようです。これが設定されており、同じエラーが発生します:SQLState = 37000、NativeError = 4060

4

3 に答える 3

1

括弧は修飾されたテーブル名全体に広がっています - 個々のコンポーネントのみを括弧で囲む必要があります:

bcp [HelpDesk-EasyPay].dbo.[customer] out d:\MSSQL\Data\customer.bcp -N -Utest -Ptest -T

動作するはずなので、次のようにします。

SET @bcp = "master..xp_cmdshell 'BCP " + "[" + @db + "]..[" + @TableName + "]" + " OUT" + @Path + "" + @TableName+".txt -c -U" + @UserName + " -P" + @PassWord + " -S" + @ServerName + " -T" + "'" 

あなたのコードで。あなたが与えたエラーメッセージは切り捨てられたようです。そうでなければ、もちろん存在しないデータベース「[HelpDesk-EasyPay.dbo.customer]」を開こうとしていることがわかりました。テーブルが指定されていないというエラーが表示されます。

于 2008-11-07T13:43:25.163 に答える
0

OUTにも同じ問題があります(マイナス文字はすべてのイベントを殺します^は機能しません)

私はQUERYOUTでそれを避けます。このような :

SET  @s = 'BCP "SELECT * FROM [HelpDesk-EasyPay].dbo.customers" QUERYOUT myfile.txt ...'
于 2009-10-23T13:39:46.550 に答える