BCP将DATE转换为VARCHAR

时间:2016-03-24 19:53:23

标签: sql-server tsql bcp

我无法保存文件。我不知道为什么

DECLARE @allquery varchar(8000)

SET @allquery = ' bcp "SELECT ''a'' UNION ALL SELECT ' + CAST(CAST(GETDATE()as date) as char(200)) + ' FROM rozklad.dbo.rozklad" queryout D:\bcp\tmp.txt -S '+@@SERVERNAME+' -T -w -t,'

exec xp_cmdshell @allquery

我收到此错误

  

错误= [Microsoft] [SQL Server的ODBC驱动程序11] [SQL   服务器]
  将varchar值'a'转换为数据类型int。

时转换失败

2 个答案:

答案 0 :(得分:0)

您缺少一些单引号。试试这个

DECLARE @allquery varchar(8000)
SET @allquery = ' bcp "SELECT ''a'' UNION ALL SELECT ''' + CAST(CAST(GETDATE()as date) as char(200)) + ''' FROM rozklad.dbo.rozklad" queryout D:\bcp\tmp.txt -S '+@@SERVERNAME+' -T -w -t,'
exec xp_cmdshell @allquery

您的初始查询是在编写类似

的内容
SELECT 'a'
UNION ALL 
SELECT 2016-03-24

这导致错误,因为2016-03-24结果是1989年的INT。

现在就像

SELECT 'a'
UNION ALL 
SELECT '2016-03-24'

答案 1 :(得分:0)

你有这个部分在你的引号之外:

CAST(CAST(GETDATE()as date) as char(200))

它应该在引号内,因此它由SQL评估。

"SELECT ''a'' UNION ALL SELECT CAST(CAST(GETDATE()as date) as char(200)) FROM ...

此外,您应该考虑将较小的日期转换为char。你什么时候会得到一个char(200)?

的结果