첫 번째로, 저는 학사 학위 논문에 도움이 필요합니다. SQL Server 2008 Release 2에서 전체 데이터베이스를 수행하고 있습니다. 문제는 자체적으로 작동하지만 제약 조건에서 사용하지 않는 함수를 사용하는 check 제약 조건에 있습니다. 제약 조건의 결과는 다음과 같아야합니다. 한 명의 직원이 하루에 한 번의 버스 여행 만 할 수 있습니다.새로 삽입 된 행에 대한 CHECK 제약 조건에 sql 함수 사용
표 탈취 여행 다음은 그 탈취 여행을가는 직원 포함
CREATE TABLE SluzebniCesta(
idSluzCesty int PRIMARY KEY NOT NULL,
DatumCesty DATE NOT NULL,
CasOdjezdu TIME(0) NOT NULL,
CasPrijezdu TIME(0),
CONSTRAINT Odjezd_prijezd CHECK(CasPrijezdu > DATEADD(hour,2,CasOdjezdu))
);
테이블 :
CREATE TABLE ZamNaCeste(
idZamNaCeste int PRIMARY KEY NOT NULL,
SluzebCestaID int NOT NULL,
ZamestnanecID int NOT NULL,
FOREIGN KEY (ZamestnanecID) REFERENCES Zamestnanec(idZamestnance),
FOREIGN KEY (SluzebCestaID) REFERENCES SluzebniCesta(idSluzCesty)
);
외래 키 ZamestnanecID는 직원의 ID이며 SluzebCestaID이 탈취 여행 ID입니다.
이제 기능 :
CREATE FUNCTION myCheckZamNaCeste(@SluzebCestaID int, @ZamestnanecID int)
RETURNS int
AS
BEGIN
DECLARE @retVal int;
DECLARE @Zamestnanec int;
DECLARE @SluzebniCesta int;
SET @Zamestnanec = (SELECT idZamestnance FROM Zamestnanec WHERE [email protected]);
SET @SluzebniCesta = (SELECT idSluzCesty FROM SluzebniCesta WHERE [email protected]);
IF EXISTS (SELECT DatumCesty FROM SluzebniCesta
WHERE idSluzCesty = @SluzebniCesta
AND DatumCesty IN (SELECT DatumCesty FROM ZamNaCeste
LEFT JOIN SluzebniCesta
ON ZamNaCeste.SluzebCestaID = SluzebniCesta.idSluzCesty
WHERE [email protected]))
BEGIN
SET @retVal=0;
END
ELSE
BEGIN
SET @retVal=1;
END
return @retVal
END
GO
그리고 직원의 증거와 자신의 탈취 여행이 포함 된 테이블에 대한 ALTER 테이블 :
ALTER TABLE ZamNaCeste
ADD CONSTRAINT check_cesty_zamestnance CHECK(dbo.myCheckZamNaCeste(SluzebCestaID,ZamestnanecID)=1);
을 그리고 제약 새로운 행을 입력 할 때 함수가 올바른 데이터를 제공하더라도 손상되었습니다. 반환 1은 좋은 결과입니다 ....
때로는 그냥 쉬운 솔루션을 볼 수 없습니다 어려운 방법으로 만들려고 노력합니다. 어쨌든 감사합니다. – Caen
기분 나쁘게 느끼지 마십시오. 나는 매우 복잡한 (그리고, 내가 추가 할 수있는 혁신적인) 솔루션을 개발 한 몇 년 동안의 횟수를 세지는 못합니다. 문제를 실제로 해결 한 한두 개의 줄만 제외하고 모든 것을 삭제합니다. 단순함은 어려운 도전입니다. 그러나 검사가 끝날 때까지 가슴을 쾅쾅 치지 않을 것입니다. :-P 그래서 우리에게 정보를 알려주세요. – TommCatt