2015-04-01 5 views
0

У меня есть этот запрос, который я использую для положить все строки в одном столбце, является динамическим, потому что мне нужно сделать, это, по крайней мере, 8 таблиц:Результат запроса (значение NULL/формат DateTime)

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 

Если Я выполнить запрос (без столбца даты и времени (Refresh Date), который содержит 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.

Может кто-нибудь мне помочь?

Благодаря

ответ

0

Ваша проблема заключается в том, что вы смешиваете старой школы конкатенацию, + с 2012/2014 CONCAT правилами функции и данные старшинства в действительности.

Этот бит кода используется синтаксис старой школы

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

Вместо этого сделать его использовать CONCAT, то ваш тип старшинство данные будут конвертировать раз даты в строку, а также ручки значения NULL.

+0

Спасибо billinkc, что исправлена ​​часть моей проблемы, теперь другая проблема заключается в том, что, например, у меня есть значения NULL в столбце Refresh_date, и я хочу видеть NULL при выполнении запроса: SELECT CONCAT ('' '', [ Location], '' ',' '', [Location Type], '' ',' '', [Region], '' ',' '', [World Region], '' ',' '', [ Refresh Date], '' '') FROM [LES]. [Location] Если я выполню этот запрос, результат будет: '0020319389', 'CMF', 'AJ', 'AJ', '' - - Если вы видите, что в конце результата у меня есть '', и здесь я хочу увидеть «NULL» или лучшее для меня - это NULL без ' –

Смежные вопросы