Sql server BCP将日期转换为VARCHAR

Sql server BCP将日期转换为VARCHAR,sql-server,tsql,bcp,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

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

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时,转换失败


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

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年的整数

现在就好像

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

您的报价之外有此部分:

CAST(CAST(GETDATE()as date) as char(200))
它应该在引号内,以便由SQL进行计算

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

此外,你应该考虑一个较小的大小,以便你的日期到字符。什么时候会有一个char(200)的结果