2017-02-13 3 views
1

У меня есть запрос видаПочему строка конкатенации в моей инструкции SELECT не работает?

SELECT '(''' + 
     SomeVarCharColumn + 
     ''',' + 
     CONVERT(NVARCHAR(MAX), SomeIntColumn) + 
     ',' + 
     CONVERT(NVARCHAR(MAX), SomeOtherIntColumn) 
     + ')' 
FROM SomeTable 

и все результаты NULL. Любая идея, где я ошибаюсь?

+2

Возможно, у вас есть NULL в одном или нескольких из ваших ценностей. Строка + null = null –

ответ

2

null + 1 является null
null + 'things' является null

попробуйте вместо этого:

select '(''' 
    + isnull(somevarcharcolumn,'') 
    + ''',' 
    + isnull(convert(nvarchar(max), someintcolumn),'null') 
    + ',' 
    + isnull(convert(nvarchar(max), someotherintcolumn),'null') 
    + ')' 
from sometable 
2

Если какой-либо столбец NULL, то значение NULL. Использовать COALESCE():

SELECT '(''' + COALESCE(SomeVarCharColumn, '') + ''',' + 
     COALESCE(CONVERT(NVARCHAR(MAX), SomeIntColumn), '') + ',' + 
     COALESCE(CONVERT(NVARCHAR(MAX), SomeOtherIntColumn), '') + ')' 
FROM SomeTable 
0

Используйте функцию CONCAT(). Когда встречаются нулевые значения, они просто опускаются из результирующей строки. Кроме того, INT на символ преобразование не является неявным нет необходимости обращенного, вы можете найти схему неявных преобразований здесь https://msdn.microsoft.com/en-us/library/ms187928.aspx

SELECT 
    CONCAT('(''',SomeVarCharColumn,''',',SomeIntColumn,',',SomeOtherIntColumn,')') AS NewVarchar 
FROM SomeTable