在bcp sql server中使用日期命令时出错

时间:2014-08-22 07:43:58

标签: sql-server sql-server-2008 bcp

您好我一直在尝试使用bcp命令将数据从查询复制到文件。当我在条件中没有列出任何DATE命令时它工作正常。但是因为我想要每个日期都有一个文件。我尝试插入日期,但它给出了错误

能否请您建议使用正确的方法。

我使用以下命令尝试了它。

declare @sql varchar(8000)
DECLARE @dated date =  GETDATE()    

set @sql= 'select top 10 [Message],Received_Time from TURBO..Receive_Message_Mst where dcs_value<>8 and DATEDIFF(dd,Received_Time,'@dated') = 1'
Print @sql
set @sql = 'bcp "'+@sql+'" queryout C:\DPFiles\Test1.csv -c -t,-T -S '
Print @sql
exec master..xp_cmdshell @sql

我收到了错误

Msg 102,Level 15,State 1,Line 4 &#39; @ dated&#39;附近的语法不正确。

我尝试了另一个并得到以下错误:

declare @sql varchar(8000)
DECLARE @dated date =  GETDATE()    

set @sql= 'select top 10 [Message],Received_Time from TURBO..Receive_Message_Mst where dcs_value<>8 and DATEDIFF(dd,Received_Time,'+@dated+') = 1'
Print @sql
set @sql = 'bcp "'+@sql+'" queryout C:\DPFiles\Test1.csv -c -t,-T -S '
Print @sql
exec master..xp_cmdshell @sql

Msg 402,Level 16,State 1,Line 4 数据类型varchar和date在add运算符中不兼容。

但是当我从上面的查询中删除和DATEDIFF(dd,Received_Time,&#39; + @ dated +&#39;)= 1时,它工作正常。

1 个答案:

答案 0 :(得分:0)

如果您要分配GETDATE(),我会反对使用变量。但是,要使此代码与变量一起使用,您可以将代码更改为:

declare @sql varchar(8000)

set @sql= 'DECLARE @dated date =  GETDATE(); ' 
set @sql = @sql + 'select top 10 [Message],Received_Time from TURBO..Receive_Message_Mst where dcs_value<>8 and DATEDIFF(dd,Received_Time,@dated) = 1'

我们正在做的只是在动态查询字符串中声明变量,然后像我们通常将变量传递给查询一样传入。

这里有另一件事要改变:

set @sql = 'bcp "'+@sql+'" queryout C:\DPFiles\Test1.csv -c -t "," -T -S '

-t指定字段终止符,因此您需要将该字符用双引号括起来,并在其前后有一个空格,即-t "," T