首先介绍,最后提问。请仔细阅读!
<小时/> 我在两个表之间有一个主 - 细节关系:
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在查找记录列表中正确显示属性和代码,因此从未混淆某人正在编辑哪个查找记录。这已经使用了2年多了。
答案 0 :(得分:0)
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;
}
这将隐藏Lookup表本身的Name列,但它使Override表可见。 (它将用于显示正确的值 做完这个,解决了问题!实际上很简单。 : - )