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

Sql 查询结果(空值/日期时间格式),sql,ssis,Sql,Ssis,我有一个用于将所有行放在一列中的查询,它是动态的,因为我需要对至少8个表执行此操作: DECLARE @tblName VARCHAR(20) = 'Location' DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX) SELECT @columns = COALESCE(@columns, '') + '+[' + COLUMN_NAME + '],+'''''',''''''' FROM INFORMATION_SCHEMA.COLUMN

我有一个用于将所有行放在一列中的查询,它是动态的,因为我需要对至少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
如果执行查询时没有包含空值的datetime列Refresh Date,则结果将为空

'0020319389','CMF','AJ','AJ'
'0031209263','CMF','AJ','AJ'
'01BM','DCL','EU','EU'
'01CR','DCL','EU','EU'
我这里的问题是,当我使用Refresh\u date列执行查询时,会出现以下错误:

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

有人能帮我吗


谢谢

您的问题是,您将传统的连接+与2012/2014 CONCAT函数混合在一起,并且数据优先规则生效

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

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

相反,使用CONCAT,那么您的数据类型优先级将把日期时间转换为字符串,并处理空值。

感谢billinkc,这解决了我的一部分问题,现在另一个问题是,例如,我在Refresh_date列中有空值,我希望在执行查询时看到空值:选择CONCAT,[位置],[Location Type]、、、[Region]、、、[World Region]、、、、[Refresh Date],来自[LES]。[Location]如果我执行该查询,结果将是:'0020319389'、'CMF'、'AJ'、'AJ',--如果您在我得到的结果的末尾看到,并且在这里我希望看到'NULL',或者对我来说最好的结果是se NULL,而不是