Sql server 2008 在查找中显示两个字段

Sql server 2008 在查找中显示两个字段,sql-server-2008,asp.net-3.5,dynamic-data,Sql Server 2008,Asp.net 3.5,Dynamic Data,首先是引言,最后是问题。请仔细阅读! 我在两个表之间有一个主-明细关系: CREATE TABLE [dbo].[LookupAttributes] ( [Id] int IDENTITY (1, 1) NOT NULL, [Name] nvarchar (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL) ; ALTER TABLE [dbo].[LookupAttributes] ADD CONSTRAINT [PK_Lo

首先是引言,最后是问题。请仔细阅读! 我在两个表之间有一个主-明细关系:

CREATE TABLE [dbo].[LookupAttributes] (
    [Id] int IDENTITY (1, 1) NOT NULL, 
    [Name] nvarchar (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL) ;
ALTER TABLE [dbo].[LookupAttributes] ADD CONSTRAINT [PK_LookupAttributes] PRIMARY KEY ([Identity]) ; 

CREATE TABLE [dbo].[Lookup] (
    [Id] int IDENTITY (1, 1) NOT NULL, 
    [LookupAttributesLink] int NOT NULL, 
    [Code] nvarchar (20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Value] nvarchar (80) COLLATE SQL_Latin1_General_CP1_CI_AS NULL) ;
ALTER TABLE [dbo].[Lookup] ADD CONSTRAINT [IX_Lookup] UNIQUE ([LookupAttributenLink], [Code]) ; 
两个表中都有更多的字段和索引,但这些才是最重要的。。。 我正在从事的项目旨在维护50多个表中的数据,每周这些数据都会导出为XML,供某些桌面应用程序用作源数据。虽然我想让它成为一个漂亮的应用程序,但它只需要快速完成,因此我使用了一个动态数据站点,以便可以维护数据。除了这张桌子外,一切都很好。。。 事实证明,有600条不同的查找记录共享相同的代码,但属性不同。DDS在查找记录列表中正确显示属性和代码,这样就不会混淆某人正在编辑的查找记录。这已经使用了两年多了。 现在的问题是:添加了一个新的表查找覆盖,它链接到查找表的[Id]字段。因此,这个新表中的每条记录都会显示[Code]字段,但由于[Code]不是唯一的,所以不清楚哪个覆盖记录属于哪个查找记录。 为了解决这个问题,我需要显示查找记录中的更多信息。由于唯一唯一的字段集是attribute plus代码,因此我需要同时显示这两个字段。但是显示[LookupAttributesLink]+[Code]也不是一个选项,因为[LookupAttributesLink]只是一个数字。我需要DDS在单个列中显示[Attributes].[LookupAttributesLink]+[Lookup].[Code]。问题是:怎么做?我考虑过向查找表中添加一个计算字段,但我无法通过这种方式获取属性名称。我可以创建一个特殊页面来维护此表,但我也不喜欢这种解决方案,因为在我看来,它打破了DDS原则。我试图避免这样的页面。那么,有没有其他方法可以让站点在覆盖表中同时显示属性名和查找代码? 最有趣的解决方案是使用可以检索属性名的计算字段。怎么做


我自己解决了!请参阅下面的答案,它的效果很好。找到了!我必须做几件事:

CREATE FUNCTION LookupName (
  @Attr int,
  @Code nvarchar(255)
) RETURNS nvarchar(1000)
AS
BEGIN
 DECLARE @Name nvarchar(1000)
 SELECT @Name = Name
 FROM [dbo].[LookupAttributes]
 WHERE [Id]=@Attr;
 RETURN @Name + '/' + @Code;
END
GO
ALTER TABLE [dbo].[lookup] ADD [Name] AS [dbo].[LookupName]([LookupAttributesLink], [Code])
GO
这将向使用函数计算正确名称的表中添加一个额外的计算字段。然后,我不得不为查找表添加一些元数据:

[MetadataType(typeof(LookupMetadata))]
public partial class Lookup { }
[DisplayColumn("Name", "Name")]
[DisplayName("Lookup")]
public class LookupMetadata
{
    [ScaffoldColumn(false)]
    public int Id;
    [ScaffoldColumn(false)]
    public object Name;
}
这将在查找表本身中隐藏“名称”列,但会使其在替代表中可见。它将用于显示正确的值。 这样做,解决了问题!其实很容易-