여러 원본에서 선택한 파일을 카탈로그하는 테이블이 있습니다. 새 파일이 카탈로그 될 때 파일이 이전에 카탈로그 화 된 파일의 사본인지 여부를 기록하고 싶습니다. 테이블 ("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
를 - 코드의 일부가 포함되지 않은 이유를 확실하지 서식을 지정하는 방법과이를 수정하는 방법은 다릅니다. –