首先,您上面的表达式不返回带空格的名称。
我认为你的意思是这样的空间:
=Fields!FirstName.Value & " " & iif (isNothing(Fields!MiddleName.Value), " ", Fields!MiddleName.Value) & " " & Fields!LastName.Value
除了 Jonnus 的答案,您还可以使用 'Len' 来检查它的长度。
如果您只担心 MiddleName,您可以使用 Len 来使用此表达式
=Fields!FirstName.Value & " " & IIF(Len(Fields!MiddleName.Value) < 1,"", Fields!MiddleName.Value) & " " & Fields!LastName.Value
但如果我是你,我宁愿使用 sql 函数来处理这个问题,而不是用凌乱的表达式来处理。而且我还可以将它重用于其他报告,而不是再次重复该表达式。
这是一个函数示例,它返回一个全名和你的格式的中间名。
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE ID = OBJECT_ID(N'[dbo].[GetClientFullNameWithMiddleName]') AND
xtype in (N'FN', N'IF', N'TF'))
DROP FUNCTION [dbo].[GetClientFullNameWithMiddleName]
GO
CREATE FUNCTION [dbo].[GetClientFullNameWithMiddleName](@ClientID UNIQUEIDENTIFIER)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @FULLNAME NVARCHAR(MAX)
DECLARE @LASTNAME NVARCHAR(MAX)
DECLARE @FIRSTNAME NVARCHAR(MAX)
DECLARE @MIDDLENAME NVARCHAR(MAX)
SET @LASTNAME = ISNULL((SELECT Lastname FROM Client WHERE ClientID = @ClientID),'')
SET @FIRSTNAME = ISNULL((SELECT Firstname FROM Client WHERE ClientID = @ClientID),'')
SET @MIDDLENAME = ISNULL((SELECT Middlename FROM Client WHERE ClientID = @ClientID),'')
IF(@ClientID <> '00000000-0000-0000-0000-000000000000')
BEGIN
IF(@FIRSTNAME <> '')
BEGIN
SET @FULLNAME = CAST((@FIRSTNAME) AS NVARCHAR(MAX))
IF(@MIDDLENAME <> '' AND @FULLNAME <> '')
BEGIN
SET @FULLNAME = CAST((@FULLNAME + ' ' + @MIDDLENAME) AS NVARCHAR(MAX))
END
IF(@LASTNAME <> '' AND @FULLNAME <> '')
BEGIN
SET @FULLNAME = CAST((@FULLNAME + ' ' + @LASTNAME) AS NVARCHAR(MAX))
END
END
ELSE
BEGIN
SET @FULLNAME = CAST((@FIRSTNAME)AS NVARCHAR(MAX))
END
END
ELSE
BEGIN
SET @FULLNAME = ''
END
RETURN @FULLNAME
END
GO
那么你可以这样使用它
SELECT
[dbo].[GetClientFullNameWithMiddleInitial](ClientID)
FROM Client