我们有两个表需要在应用程序中以各种页面/屏幕显示字段,并且报告作为单独字段的CONCAT(在同一个表中连接)
1)客户表:FirstName +''+(第一个字符([MiddleName])+''如果不为null)+ LastName 预期结果:“John Doe” - 或 - “John M Doe”
(注意:与AddrLine1 + AddrLine2 + City + State + Zip + Zip4类似的情况)
2)车辆表:VYear +''+ VMake +''+ VModel +':'+ VName 预期结果:“2008 Ford F350:Blue” - 或 - “2008 Ford F350:#45”
我看到了两种方法来做这些类型的显示输出。
a)创建服务器端VB函数,从字段值中正确格式化显示(某些字段可能为null,请记住)
b)在每个表中都有一个DB列,例如[Name4Display]和[VName4Display],它们使用INSERT-和UPDATE-触发器进行适当更新。
当然,欢迎您提出意见,欢迎提出此问题的其他解决方案。
感谢...,J
答案 0 :(得分:3)
如果您只想显示格式化数据,为什么不写一个符合您需要的视图?没有理由存储格式化的值;这是多余和凌乱的。
答案 1 :(得分:0)
我认为为显示数据设置专栏并不好,正如您所说,您必须拥有用于更新这些字段的触发器或函数,请记住这些操作会使您的代码变得复杂且代码很好而且#39 ;只是简单的
答案 2 :(得分:0)
我强烈建议您创建一个视图,而不是使用重复数据向表中添加字段。除了使用更多空间之外,将出现的问题是复制的数据可能并不总是与构成它的字段同步。例如,如果我在表格中有以下信息:
FirstName: 'Dave',
LastName: 'Jones',
FullName: 'Dave Jones'
然后我将他的姓更新为'Johnson'
,我现在在表中有这个:
FirstName: 'Dave'
LastName: 'Johnson'
FullName: 'Dave Jones'
还可以设置一个触发器,使用其他两个字段的结果自动填充FullName
字段,但这会增加复杂性。通过使用视图,您可以使用所有逻辑来过滤掉空值并根据需要对其进行格式化。
编辑: 查看SQL Server String Concatenation with Null,了解如何在处理值时实现逻辑以检查空值。
答案 3 :(得分:0)
您有几个选择。建议不要创建其他数据字段。一种选择是使用添加的字段创建视图,如:
create view vw_customer as
select *,
isnull(FirstName + ' ','') + isnull(left(MiddleName,1) + ' ','') + isnull(LastName,'') as FullName
from Customer
您也可以在应用程序中没有视图的情况下使用此选择查询。您也可以像在提到的那样在应用程序中构建字符串。
另一种选择是创建为您的表添加计算字段,以便它始终可用。像这样:
CREATE TABLE #Customer(
[CustomerID] int IDENTITY(1,1) NOT NULL,
[FirstName] varchar(50) NOT NULL,
[MiddleName] varchar(50) NOT NULL,
[LastName] varchar(50) NOT NULL,
[FullName] AS isnull(FirstName + ' ','') + isnull(left(MiddleName,1) + ' ','') + isnull(LastName,'')
) ON [PRIMARY]
答案 4 :(得分:0)
"查看"绝对是一个干净的解决方案。