将日期参数传递给bcp的动态查询

时间:2013-10-16 01:11:47

标签: dynamic bcp

我有以下存储过程将数据复制到文本文件中:

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF
GO


ALTER Procedure BCP_Inv_Text_File
(  
@FileName varchar(100),  
@DocDate varchar(10)
)  
as  
        Declare @str varchar(1000)  
        Declare @SQL varchar(1000)
        set @SQL = 'Select T0.DocNum, T0.DocDate FROM Demo88..OINV T0 WHERE DocDate = @DocDate'
        set @str='Exec Master..xp_Cmdshell ''bcp "'+@SQL+'" queryout "'+@FileName+'" -T -c'''   
        Exec(@str)  

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

然后我希望能够执行类似于此的过程:

EXEC BCP_Inv_Text_File 'C:\Export\Inv.txt', '8/9/2013'

我收到以下错误:

Error = [Microsoft][SQL Native Client][SQL Server]Must declare the scalar variable "@DocDate".

1 个答案:

答案 0 :(得分:0)

我发现为了在日期参数的BCP语句中获得正确的语法,我不得不添加额外的单引号,如下所示:

    set @SQL = 'Select T0.DocNum, T0.DocDate FROM Demo88.dbo.OINV T0 WHERE T0.DocDate = ''''' + @DocDate + ''''''
    set @str='Exec Master..xp_Cmdshell ''bcp "'+@SQL+'" queryout "'+@FileName+'" -T -c'''