【问题标题】:Using varchar in the query syntax for BCP utility in SQL Server在 SQL Server 中 BCP 实用程序的查询语法中使用 varchar
【发布时间】:2014-03-20 17:52:51
【问题描述】:

我正在尝试使用 BCP 实用程序通过这些命令导出数据,但查询中出现错误...

我声明了许多变量,但是我的问题在于查询,因为我必须使用 varchar 列进行过滤(CO_LINvarchar(6)),但如果我使用 ' 来包装变量 @LINEAPRODUCTO 我在 SQL Server 查询工具中遇到错误,但如果我不使用任何东西,它会给我这个错误:

列名“MEN”无效

MEN是我在变量声明中设置的字符串值)

DECLARE @PATH_ARC VARCHAR(200)
DECLARE @USUARIO VARCHAR(20)
DECLARE @PASSWORD VARCHAR(20)
DECLARE @TABLA VARCHAR(40)
DECLARE @SERVIDOR VARCHAR(100)
DECLARE @ARCHIVOSALIDA VARCHAR(200)
DECLARE @RUTAEJECUTAR VARCHAR(500)
DECLARE @MES VARCHAR(2)
DECLARE @DIA VARCHAR(2)
DECLARE @ANNO VARCHAR(4)
DECLARE @BASEDEDATOS VARCHAR(20)
DECLARE @LINEAPRODUCTO VARCHAR(6)
DECLARE @CONSULTA VARCHAR(300)

SET NOCOUNT ON;

-- Asignación de valores de las variables para la ejecución del stored procedure
SET @TABLA ='dbo.art'
SET @SERVIDOR = 'RJLD-LAPTOP\SQLEXPRESS'
SET @USUARIO = 'exp'
SET @PASSWORD = 'exp'
SET @PATH_ARC = 'C:\PRUEBA\'
SET @BASEDEDATOS = 'DEMO'
SET @LINEAPRODUCTO = 'MEN'

SET @MES = CAST(MONTH(GETDATE()) AS nchar(2))

IF LEN(RTRIM(LTRIM(@MES))) = 1
BEGIN
   SET @MES = '0' + RTRIM(LTRIM(@MES))
END

SET @DIA = CAST(DAY(GETDATE()) AS nchar(2))

IF LEN(RTRIM(LTRIM(@DIA))) =1
BEGIN
    SET @DIA = '0' + RTRIM(LTRIM(@DIA))
END

SET @ANNO = CAST(YEAR(GETDATE()) AS nchar(4))
SET @ARCHIVOSALIDA = 'RI_C58-L02_' + @ANNO  + @MES + @DIA + '.txt'
SET @PATH_ARC = '"' +  @PATH_ARC + @ARCHIVOSALIDA + '"'
SET @CONSULTA = '"select RTRIM(LTRIM(ITEM)),' + @ANNO + ',' +  @MES + ',' + @DIA + ',CO_PROV from ' + @TABLA + ' WHERE CO_LIN=' + @LINEAPRODUCTO + '"'

SET @RUTAEJECUTAR = 'bcp ' +  @CONSULTA + ' queryout ' + @PATH_ARC + ' -S ' + @SERVIDOR + ' -U ' + @USUARIO + ' -P ' + @PASSWORD + ' -c -t "|" -d ' +  @BASEDEDATOS

--  select @RUTAEJECUTAR
EXEC xp_cmdshell @RUTAEJECUTAR   

【问题讨论】:

    标签: sql-server tsql bcp


    【解决方案1】:

    我不熟悉 BCP 实用程序,但我看到的情况与我在 StackOverflow 使用的代码格式中看到的情况相同。请注意 PRUEBA 之后的斜线如何导致无法识别以下撇号。我发现了另一个问题here,有人不得不使用斜杠作为转义字符绕过 BCP 实用程序。

    如果文件路径中的斜杠注册为转义字符,那么下面的代码应该可以工作:

    SET @PATH_ARC = 'C:\\PRUEBA\\'
    SET @BASEDEDATOS = 'DEMO'
    SET @LINEAPRODUCTO = 'MEN'
    

    请注意,使用上面的代码,StackOverflow 格式也可以正确读取它。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2017-03-10
      • 2011-12-21
      • 2015-05-09
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多