您好我一直在尝试使用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时,它工作正常。
答案 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
。