BCP 将 DATE 转换为 VARCHAR

BCP converting DATE to VARCHAR

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

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

我收到这个错误

Error = [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]
Conversion failed when converting the varchar value 'a' to datatype 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,它是一个 INT。

现在会像

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) 的结果?