【问题标题】:BCP out Error in SQL2000: SQLState = 37000, NativeError = 4060SQL2000 中的 BCP 输出错误:SQLState = 37000,NativeError = 4060
【发布时间】:2010-09-21 02:32:39
【问题描述】:

我创建了一个 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 连接到主数据库。这是它的设置,我得到同样的错误:SQLState = 37000, NativeError = 4060

【问题讨论】:

  • 您用来运行它的命令行字符串是什么?这看起来像是身份验证问题。
  • 我从查询分析器运行这个,因为我有 118 个表要输出到平面文件。我似乎同意这是一个身份验证问题,因为我尝试使用用户名 sa 密码 root 连接到主数据库。这是它的设置,我得到同样的错误: SQLState = 37000, NativeError = 4060 如果我从命令行运行它,同样的错误。我想念的东西一定是小东西?
  • 我也相信你想要“queryout”而不是“out”

标签: sql-server stored-procedures jdbc sql-server-2000 bcp


【解决方案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]”,当然,它不存在,即使它这样做,你会得到一个没有指定表的错误。

【讨论】:

    【解决方案2】:

    我对 OUT 也有同样的问题(减号会杀死所有事件,如果 ^ 不起作用)

    我用 QUERYOUT 来避免它。像这样:

    SET  @s = 'BCP "SELECT * FROM [HelpDesk-EasyPay].dbo.customers" QUERYOUT myfile.txt ...'
    

    【讨论】:

      【解决方案3】:

      也许有人会派上用场:我对 SQL Server 2017 也有同样的问题。原因是数据库名称周围的方括号。

      【讨论】:

        猜你喜欢
        • 2019-02-18
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2014-05-14
        • 2015-09-08
        • 2013-07-13
        • 1970-01-01
        相关资源
        最近更新 更多