我必须重新创建存在于DB1
中的存储过程,并将现有表映射到新数据库DB2
中的新表。
在DB1
,表格中有列Fullname
,在新数据库中有两列firstname
,lastname
。我可以有concat但是有一个用户定义的函数也会截断我必须使用的所有特殊字符。
如何将名字和姓氏列用作一个全名列,以便它适合此case语句?
我从另一个注册了enr的表中得到了[P Name],这个表就像拥有所有名称的主表一样,从case表中获取名称的条件如case case所示。
我尝试搜索所有博客和stackexchange但无法获得所需的回复。
masterfinancer = dbo.fn_RemoveSpecialChars(iif(enr.p_name = 'XXXXXXXXX,XXXXXXX(2)', 'XXXXX XXXX XXX GROUP', mv.master_vendor_name))
Sma_finace_key = iif(enr.p_name = 'XXXXXXXXX0L(2)', 1111, mv.ven_key)
[P Name] = case
when enr.p_name = 'INACTIVE ' or enr.p_name = 'UNASSIGNED'
then [P Name]
else dbo.fn_RemoveSpecialChars(enr.p_name)
end
答案 0 :(得分:0)
您需要在每个单独的字段上使用该功能并将它们连接在一起。在这里,我删除了IIF语句(仅适用于SQL 2012)并创建了一个FullName字段,假定您想要“First,Last”。我添加了COALESCE以避免当名字或姓氏为NULL时FullName字段为NULL:
SELECT
masterfinancer = dbo.fn_RemoveSpecialChars(
CASE
WHEN enr.p_name = 'XXXXXXXXX,XXXXXXX(2)'
THEN 'XXXXX XXXX XXX GROUP'
ELSE mv.master_vendor_name
END)
, Sma_finace_key =
CASE
WHEN enr.p_name = 'XXXXXXXXX0L(2)'
THEN 1111
ELSE mv.ven_key
END
, [P Name] =
CASE
WHEN enr.p_name IN('INACTIVE ', 'UNASSIGNED')
THEN [P Name]
ELSE dbo.fn_RemoveSpecialChars(enr.p_name)
END
, FullName =
COALESCE(dbo.fn_RemoveSpecialChars(enr.last_name) + ', ', '') +
COALESCE(dbo.fn_RemoveSpecialChars(enr.first_name), '')