我有一个表可以对来自多个来源的选定文件进行编目。我想在新文件编目时记录一个文件是否是以前编目文件的副本。我在我的表中有一列(“primary_duplicate”)来记录每个条目为'P'(主)或'D'(重复)。我想为此列提供一个默认绑定,以检查新文件正在被记录时该文件的其他情况(即名称,长度,时间戳)。如何使用Sql Server列的默认绑定的参数化函数
我已经创建了一个执行此检查的函数(请参阅下面的“GetPrimaryDuplicate”)。但我不知道如何绑定这个函数,它需要三个参数作为其默认绑定表的“primary_duplicate”列。
我想避免使用触发器。我目前有一个存储过程用于插入执行此检查的新记录。但是我想确保如果在此存储过程之外执行插入操作,标志设置正确。
如何使用插入的行中的值调用此函数?
USE [MyDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[FileCatalog](
[id] [uniqueidentifier] NOT NULL,
[catalog_timestamp] [datetime] NOT NULL,
[primary_duplicate] [nchar](1) NOT NULL,
[name] [nvarchar](255) NULL,
[length] [bigint] NULL,
[timestamp] [datetime] NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[FileCatalog] ADD CONSTRAINT [DF_FileCatalog_id] DEFAULT (newid()) FOR [id]
GO
ALTER TABLE [dbo].[FileCatalog] ADD CONSTRAINT [DF_FileCatalog_catalog_timestamp] DEFAULT (getdate()) FOR [catalog_timestamp]
GO
ALTER TABLE [dbo].[FileCatalog] ADD CONSTRAINT [DF_FileCatalog_primary_duplicate] DEFAULT (N'GetPrimaryDuplicate(name, length, timestamp)') FOR [primary_duplicate]
GO
USE [MyDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[GetPrimaryDuplicate]
(
@name nvarchar(255),
@length bigint,
@timestamp datetime
)
RETURNS nchar(1)
AS
BEGIN
DECLARE @c int
SELECT @c = COUNT(*)
FROM FileCatalog
WHERE [email protected] and [email protected] and [email protected] and primary_duplicate = 'P'
IF @c > 0
RETURN 'D' -- Duplicate
RETURN 'P' -- Primary
END
GO
我为穷人代码格式化道歉 - 不知道为什么有些代码没有被列入格式化 - 以及如何纠正它。 – 2010-03-27 06:01:40