CONCAT函数中有2列以上

时间:2013-05-15 13:59:40

标签: sql-server sql-server-2012 concat

在SQL Server 2012中,我希望concat 5列为1,但在查询中它可以正常工作,但是当我在视图中输入时,它会给我一个错误,如

  

Msg 174,Level 15,State 1,Line 3
  CONCAT函数需要2个参数。

问题是什么,所以我可以修复它,因为concat对于{1}}超过1列来说是一个很好的函数,因为如果它是null,它们会使它变空..

CODE:

concatenate

8 个答案:

答案 0 :(得分:8)

您视图中的其他地方一定有错误!!

好的,那么我对你的代码所做的就是改变这一行

{ fn CONCAT('T.a.v. ', C.Salutation + ' ', C.FirstName + ' ', C.MiddleName + ' ', C.LastName) } AS 'T.a.v.'

到这个

CONCAT('T.a.v. ', C.Salutation + ' ', C.FirstName + ' ', C.MiddleName + ' ', C.LastName) AS 'T.a.v.'

编辑:

只是为了解释代码的不同,是{fn ....}的那个是Canonical函数,而microsoft承诺它可以在所有ODBC连接上工作。

来自MSDN:

规范函数是所有数据提供程序都支持的函数,可供所有查询技术使用。规范函数不能由提供者扩展。

答案 1 :(得分:6)

HY。如果要将CONCAT作为规范函数{fn CONCAT(...)}用于视图设计器,可以使用一种解决方案来连接两个以上的列/字符串。

您可以在CONCAT中使用CONCAT,如下所示:

假设您想要将两个代码连接成一个代码,并在

之间加上“ - ”

column1 = 123456

column2 = 0001

{fn CONCAT({fn CONCAT(column1, '-')}, column2)}

结果您将获得:123456-0001

答案 2 :(得分:1)

我有同样的问题,所有其他答案对我不起作用,我不想使用Andrei的那个。

我设法使用create view语句创建视图。

CREATE VIEW ViewName AS
SELECT        
   'Aan ' + A.Name AS 'Naam', 
   { fn CONCAT('T.a.v. ', C.Salutation + ' ', C.FirstName + ' ', C.MiddleName + ' ', C.LastName) } AS 'T.a.v.',   
   ISNULL(ISNULL(A.Address1_Line2, A.Address1_Line1), 
   C.Address1_Line2) AS 'Adres', 
   ISNULL(A.Address1_PostalCode + ' ' + A.Address1_City,     A.Address2_PostalCode + ' ' + A.Address2_City) AS 'Woonplaats',
   'heer' + ' ' + ISNULL(C.MiddleName + ' ', N'') + ISNULL(C.LastName, N'') AS 'Aanhef'  
FROM dbo.Account AS A 
FULL OUTER JOIN  
    dbo.Contact AS C ON A.Name = C.AccountIdName  
WHERE 
    (C.Salutation = 'Dhr.') AND (A.Name IS NOT NULL) AND (A.StatusCode = 1) 
    AND (ISNULL(C.StatusCode, 1) = 1) OR (C.Salutation = 'dhr.') AND (A.Name IS NOT NULL) AND (A.StatusCode = 1) AND (ISNULL(C.StatusCode, 1) = 1)  

答案 3 :(得分:1)

使用CONCAT_WS代替CONCAT。 即使您在SSMS的设计模式下使用它,它也不会在视图中保持不变,并且您可以使用它指定一个不会放在字符串末尾的字符串分隔符。

示例:

select CONCAT_WS('; ',NULL,'Frank',NULL,'Mary')

结果将为Frank; Mary

答案 4 :(得分:0)

我得到了同样的错误。这是怎么回事。我在SQL Server(2014)Management Studio中使用了查询/视图构建器。我键入了函数“CONCAT(...”,但它将其转换为“{fn CONCAT(...)}”。然后我得到了错误,尽管有多个项目。

我摆脱了“{fn ...}”,它运作良好。

答案 5 :(得分:0)

在视图SQL Server中创建CONCAT FUNCTION 必须需要2个参数。因此,您可以尝试以下方法:

SELECT
concat(
    concat('T.a.v. ', C.Salutation + ' '), 
    concat(C.FirstName + ' ', concat(C.MiddleName + ' ', C.LastName)) 
)  AS 'T.a.v.'

答案 6 :(得分:0)

对我来说,效果很好! 从myview中选择(第1列+第2列+第3列)作为myconcat 而是{fn CONCAT({fn CONCAT(column1,'-')},column2)}

答案 7 :(得分:-1)

当我想使用设计器创建视图并且ssms设计器自动添加fn {exp…。}时遇到了这个问题,但是我改用了脚本, Cerate视图ViewName 我的concat脚本

这没问题