Ошибка BCP out в SQL2000: SQLState = 37000, NativeError = 4060 - PullRequest
2 голосов
/ 06 ноября 2008

Я создал процедуру, которая захватывает все пользовательские таблицы в локальной БД на моем компьютере. Я хочу иметь возможность создавать плоский файл всех моих таблиц, используя BCP и SQL. Это фиктивная база данных в SQL 2000, соединяющаяся через проверку подлинности Windows. Я установил мою переменную пути окружения в WinXP SP2. Я создал новых пользователей для доступа к БД, отключил брандмауэр, используя доверенное соединение. Я перепробовал десятки форумов, не повезло.

В командной строке DOS я получаю ту же ошибку.

SQLState = 37000, NativeError = 4060 Ошибка = [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Не удалось открыть базу данных, запрошенную при входе в систему «[HelpDesk-EasyPay». Ошибка входа.

Вот мой ИП:

@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? Точно сказать не могу.

edit: я запускаю это из анализатора запросов, потому что у меня 118 таблиц для вывода в плоский файл. Я, кажется, согласен, что это проблема аутентификации, потому что я пытался подключиться к master db с именем пользователя sa пароль root. это то, что установлено, и я получаю ту же ошибку: SQLState = 37000, NativeError = 4060

Заранее благодарю. EJ

Ответы [ 2 ]

1 голос
/ 07 ноября 2008

Ваши скобки распространяются на полное имя таблицы - в скобках должны быть только отдельные компоненты:

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]», которая, конечно же, не существует, и даже если она сделал бы, тогда вы получите ошибку, что таблица не указана.

0 голосов
/ 23 октября 2009

У меня та же проблема с OUT (символ минус убивает все, что ^ не работает)

Я избегаю этого с помощью QUERYOUT. Как это:

SET  @s = 'BCP "SELECT * FROM [HelpDesk-EasyPay].dbo.customers" QUERYOUT myfile.txt ...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...