CONCAT函数中有2列以上

Jer*_*oen 8 sql-server concat sql-server-2012

在SQL Server 2012中我希望concat5列成1但在查询中它可以工作但是当我放入视图时它会给我一个错误

Msg 174,Level 15,State 1,Line 3
CONCAT功能需要2个参数.

有什么问题所以我可以解决它,因为它concat是一个concatenate超过1列的好函数,因为如果它为null,它们会使它为空.

码:

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)     
Run Code Online (Sandbox Code Playgroud)

Ken*_*sen 9

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

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

{ fn CONCAT('T.a.v. ', C.Salutation + ' ', C.FirstName + ' ', C.MiddleName + ' ', C.LastName) } AS 'T.a.v.'
Run Code Online (Sandbox Code Playgroud)

对此

CONCAT('T.a.v. ', C.Salutation + ' ', C.FirstName + ' ', C.MiddleName + ' ', C.LastName) AS 'T.a.v.'
Run Code Online (Sandbox Code Playgroud)

编辑:

只是为了解释代码的不同,是{fn ....}是一个Canonical函数,微软承诺它将适用于所有ODBC连接.

来自MSDN:

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

  • @Jeroen视图只是这样做,因为你正在使用可怕的蹩脚和错误的视图设计师.如果在普通查询窗口中编辑视图的代码,则不会发生这种情况.因此,不要右键单击>修改/设计,而是选择右键单击>脚本作为更改为>新查询窗口. (8认同)
  • 换句话说,{fn CONCAT(...)}是'ODBC'函数,只接受2个参数,而普通的CONCAT(...)是接受许多参数的SQL Server 2012函数. (2认同)

小智 8

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

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

假设您想要将两个代码连接成一个代码,其间带有" - "

column1 = 123456

column2 = 0001

{fn CONCAT({fn CONCAT(column1, '-')}, column2)}
Run Code Online (Sandbox Code Playgroud)

因此,您将拥有:123456-0001


小智 5

我遇到了同样的问题,所有其他答案都不适合我,我不想使用安德烈的答案。

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

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)  
Run Code Online (Sandbox Code Playgroud)