BCP命令反复要求凭据问题求助:已尝试-U/-P参数仍未解决
BCP命令反复要求凭据的解决方法
问题概述
执行BCP导出数据时,无论使用信任连接参数-T,还是指定用户名密码参数-U/-P,均收到错误提示:
未提供用户名,请使用-U提供用户名或使用-T进行Trusted Connection
执行的SQL代码如下:
declare @sqlselect varchar(100), @cmd varchar(100) set @sqlselect = '"select * from [sr05107].[armaninodw].[dbo].[vw_items]"' set @cmd = 'bcp '+ @sqlselect + ' queryout "D:\PrecisionPoint\Customer_Credit_Limit_rpt.csv" -T' EXEC master..XP_CMDSHELL @cmd
可行解决步骤
- 修正引号转义逻辑:原代码中使用
"转义引号,可能导致BCP无法正确识别查询语句。改用单引号嵌套的方式构造命令:declare @sqlselect varchar(100), @cmd varchar(200) set @sqlselect = 'select * from [sr05107].[armaninodw].[dbo].[vw_items]' -- 用双引号包裹查询语句,外层通过两个单引号转义 set @cmd = 'bcp "' + @sqlselect + '" queryout "D:\PrecisionPoint\Customer_Credit_Limit_rpt.csv" -T' EXEC master..XP_CMDSHELL @cmd - 验证xp_cmdshell执行账户权限:xp_cmdshell以SQL Server服务账户身份运行,使用
-T时,该账户需具备目标数据库[sr05107].[armaninodw]的访问权限,以及视图vw_items的读取权限。可给服务账户添加对应数据库角色(如db_datareader)。 - 指定BCP完整路径:若系统无法定位bcp.exe,会导致命令解析异常。需根据SQL Server版本指定完整路径,示例:
注:路径中的set @cmd = 'C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\bcp.exe "' + @sqlselect + '" queryout "D:\PrecisionPoint\Customer_Credit_Limit_rpt.csv" -T'170对应SQL Server 2019,不同版本需调整路径数字(如2017对应140)。 - 检查-U/-P参数格式:使用用户名密码时,确保参数格式正确,若密码含特殊字符需用引号包裹:
set @cmd = 'bcp "' + @sqlselect + '" queryout "D:\PrecisionPoint\Customer_Credit_Limit_rpt.csv" -U your_username -P "your_password_with_special_chars"' - 确认目标路径写入权限:SQL Server服务账户需拥有
D:\PrecisionPoint\目录的写入权限,否则可能触发异常提示。
内容的提问来源于stack exchange,提问作者David Mercado
相关产品推荐
相关产品推荐

