为什么我的SELECT语句中的字符串连接不起作用?

问题描述:

我有形式为什么我的SELECT语句中的字符串连接不起作用?

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

的查询和结果全部NULL。任何想法,我要去哪里错了?

+2

也许你在一个或多个你的价值观有一个NULL。 String + null = null –

null + 1null
null + 'things'null

试试这个:

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

如果任何列NULL,则该值为NULL。使用COALESCE()

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

使用CONCAT()函数。当遇到空值时,它们只是从结果字符串中省略。此外,诠释为char的转换是隐含无需转换,你可以找到隐式转换的图表这里https://msdn.microsoft.com/en-us/library/ms187928.aspx

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