查询结果(NULL值/日期时间格式)

时间:2015-04-01 16:45:44

标签: sql ssis

我有这个查询用于将所有行放在一列中,是动态的,因为我需要使用至少8个表来执行此操作:

DECLARE @tblName VARCHAR(20) = 'Location'
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX)

SELECT @columns = COALESCE(@columns, '') + '+[' + COLUMN_NAME + '],+'''''','''''''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tblName and TABLE_SCHEMA='LES'
select @columns

SET @sql = 'SELECT CONCAT(''''''''' + STUFF(@columns, 103,9, '') + '+'''''') FROM ' + @tblName
select @sql
--------------------------------------------------------------------------
R1: SELECT CONCAT(''''+[Location],+''','''+[Location Type],+''','''+[Region],+''','''+[World Region],+''','''+[Refresh Date]+''') FROM Location

如果我执行查询(没有包含NULL值的datetime列(刷新日期)),结果将是

'0020319389','CMF','AJ','AJ'
'0031209263','CMF','AJ','AJ'
'01BM','DCL','EU','EU'
'01CR','DCL','EU','EU'

我的问题是,当我使用Refresh_date列执行查询时,出现此错误:

  

从字符串转换日期和/或时间时转换失败。

有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

您的问题是,您正在将旧学校连接+与2012/2014 CONCAT函数混合,并且数据优先规则已生效。

这段代码使用的是旧式语法

SELECT @columns = COALESCE(@columns, '') + '+[' + COLUMN_NAME + '],+'''''','''''''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tblName and TABLE_SCHEMA='LES'

相反,让它使用CONCAT,然后您的数据类型优先级将您的日期时间转换为字符串以及处理NULL。