【问题标题】:BCP database with period in name名称中带有句点的 BCP 数据库
【发布时间】:2010-02-17 15:44:03
【问题描述】:

我在使用 SQL BCP 进程向我的表加载数据时遇到问题。我从 .NET 应用程序调用它,所以我执行 xp_cmdshell 可执行文件来运行 bcp 命令。以下是其中一个命令的外观:

EXEC master..xp_cmdshell 'bcp "[D001Test.Restore].[dbo].[GeneralComments]" in "<DataFile>" -q -c -t "|_|" -r "|+~+|" -k -V80 -a33000 -E -STest'

当我要导入的数据库名称(在本例中为 D001Test.Restore)有一个“.”时在名称中,bcp 命令失败。有没有办法解决?我试过带括号和不带括号。我可能必须将数据导入新数据库,并在完成后将其重命名为所需的名称。

【问题讨论】:

    标签: .net sql-server bcp


    【解决方案1】:

    您不需要 -q 参数和引号。文档说明了关于 q 参数的以下内容:

    使用此选项指定数据库, 所有者、表或视图名称 包含空格或单引号 标记。附上整个三部分 引号中的表或视图名称 ("")。

    您的数据库名称既不包含空格也不包含单引号。

    试试这个:

    bcp [D001Test.Restore].dbo.GeneralComments in "<DataFile>" -c -t "|_|" -r "|+~+|"
    -k -V80 -a33000 -E -STest
    

    【讨论】:

    • 感谢您的回答。我将对其进行测试。但是,我仍然遇到数据库名称中包含空格和句点的问题。我暂时实现了一个解决方案,使用带有下划线替换句点的临时表,但这是一个非常丑陋的概念。
    • @Kevin 如果数据库名称中有空格和句点,则需要引号。 bcp "[D001 Test.Restore].dbo.GeneralComments" in "" -c -t "|_|" -r "|+~+|" -k -V80 -a33000 -E -STest
    • @Bill 不幸的是,这不起作用。如果使用引号,则必须对 bcp 进程进行编程以查找句点,而不管括号如何。所以这个: EXEC master..xp_cmdshell 'bcp "[D019Restore.Generic Test].dbo.GeneralComments" out "
    • @Kevin 仅删除 -q 参数,但不要触摸引号。我试过 bcp "[D001 Test.Restore].dbo.GeneralComments" in "" -c -t "|_|" -r "|+~+|" -k -V80 -a33000 -E -STest 在 SQL Server 2005 上运行。
    • @Kevin 您是否尝试过使用随 SQL Server 2005 安装的 bcp.exe(C:\Program Files\Microsoft SQL Server\90\Tools\Binn\bcp.exe,文件版本:2005.90.4035.0 ) 从/向 SQL Server 2000 导出/导入数据?试试 -V80 参数。我不能尝试,因为我只有 SQL Server 2005 和 2008。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多