查询结果(NULL value/Datetime格式)
Query Result(NULL value/Datetime format)
我有一个用于将所有行放在一列中的查询,它是动态的,因为我需要至少对 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 值的日期时间列(刷新日期)),结果将是
'0020319389','CMF','AJ','AJ'
'0031209263','CMF','AJ','AJ'
'01BM','DCL','EU','EU'
'01CR','DCL','EU','EU'
我的问题是,当我使用 Refresh_date
列执行查询时,出现此错误:
Conversion failed when converting date and/or time from character string.
有人可以帮我吗?
谢谢
您的问题是您将老式串联 +
与 2012/2014 CONCAT
函数和数据优先级规则混合使用。
这段代码使用的是老式语法
SELECT @columns = COALESCE(@columns, '') + '+[' + COLUMN_NAME + '],+'''''','''''''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tblName and TABLE_SCHEMA='LES'
相反,让它使用 CONCAT,然后您的数据类型优先级会将您的日期时间转换为字符串并处理 NULL。
我有一个用于将所有行放在一列中的查询,它是动态的,因为我需要至少对 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 值的日期时间列(刷新日期)),结果将是
'0020319389','CMF','AJ','AJ'
'0031209263','CMF','AJ','AJ'
'01BM','DCL','EU','EU'
'01CR','DCL','EU','EU'
我的问题是,当我使用 Refresh_date
列执行查询时,出现此错误:
Conversion failed when converting date and/or time from character string.
有人可以帮我吗?
谢谢
您的问题是您将老式串联 +
与 2012/2014 CONCAT
函数和数据优先级规则混合使用。
这段代码使用的是老式语法
SELECT @columns = COALESCE(@columns, '') + '+[' + COLUMN_NAME + '],+'''''','''''''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tblName and TABLE_SCHEMA='LES'
相反,让它使用 CONCAT,然后您的数据类型优先级会将您的日期时间转换为字符串并处理 NULL。