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)
你视图中的其他地方一定有错误!!
好吧,那么我对你的代码所做的是改变这一行
{ 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:
规范函数是所有数据提供程序都支持的函数,可供所有查询技术使用.规范函数不能由提供者扩展.
小智 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)