在SQL Server 2012中,我希望concat
5列为1,但在查询中它可以正常工作,但是当我在视图中输入时,它会给我一个错误,如
Msg 174,Level 15,State 1,Line 3
CONCAT函数需要2个参数。
问题是什么,所以我可以修复它,因为concat
对于{1}}超过1列来说是一个很好的函数,因为如果它是null,它们会使它变空..
CODE:
concatenate
答案 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脚本
这没问题