Avatar billede Lasse Novice
18. oktober 2001 - 20:12 Der er 12 kommentarer og
1 løsning

CHECK constraints...

Ved eksekvering af foelgende faar jeg en MASSE constraint fejl. Er der nogen der kan hjaelpe mig? Jeg skal have samme funktionalitet som beskrevet i CHECK constraintsne, men de virker ikke. Jeg har ellers kigget i SQL online books, og de siger at det jeg har skrevet er tilladt. Derfor ved jeg ikke lige hvorfor den fejler.

create table AcervoDocumental(
IDacervodocumental int identity(1,1) primary key not null,
IDfondo tinyint not null FOREIGN KEY REFERENCES fondos(IDfondo),
seccion nvarchar(85) not null,
serie nvarchar(85) not null,
subserie nvarchar(85) not null,
lugar nvarchar(85) not null,
anosalida smallint not null CONSTRAINT anosalida_chk CHECK(anosalida >= 1850),
anoterminada smallint CONSTRAINT anoterminada_chk CHECK(anoterminada <= 2030 AND anoterminada>anosalida OR anoterminada IS NULL),
caja nvarchar(5) not null CONSTRAINT caja_chk CHECK(caja like \"[a-z][0-9][0-9][0-9][0-9]\"),
expediente smallint not null CONSTRAINT expediente_chk CHECK(expediente <= 999 AND expediente >= 100),
legajo tinyint not null CONSTRAINT legajo_chk CHECK(legajo <= 9 AND expediente >= 1),
foliosexpediente smallint not null CONSTRAINT foliosexpediente_chk CHECK(foliosexpediente <= 9999 AND expediente >= 1000),
foliosdigitalizados smallint not null CONSTRAINT foliosdigitalizados_chk CHECK(foliosdigitalizados <= 999 AND expediente >= 100),
observaciones nvarchar(255) not null,
);

Avatar billede torbenkoch Nybegynder
18. oktober 2001 - 20:13 #1
Hvilke fejl får du?
Avatar billede Lasse Novice
18. oktober 2001 - 20:15 #2
Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'anoterminada\' references another column, table \'AcervoDocumental\'.
Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'caja\' references another column, table \'AcervoDocumental\'.
Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'legajo\' references another column, table \'AcervoDocumental\'.
Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'foliosexpediente\' references another column, table \'AcervoDocumental\'.
Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'foliosdigitalizados\' references another column, table \'AcervoDocumental\'.
Server: Msg 1759, Level 16, State 1, Line 1
Invalid column \'[a-z][0-9][0-9][0-9][0-9]\' is specified in a constraint or computed-column definition.
Server: Msg 1750, Level 16, State 1, Line 1
Could not create constraint. See previous errors.
Avatar billede Lasse Novice
18. oktober 2001 - 20:19 #3
ja, jeg har fundet en del af fejlene selv... jeg vender lige tilbage om 2 sek med en udbedret SQL saetning, men der er stadig fejl i
Avatar billede torbenkoch Nybegynder
18. oktober 2001 - 20:20 #4
Ok, dit problem er, at når du angiver en CHECK constraint ud for en column, som du gør (det kaldes column-level), så må den IKKE referere en anden column. Istedet skal den oprettes for sig selv (såkaldt table-level).

Som der står i Books Online:

A column-level CHECK constraint can reference only the constrained column, and a table-level CHECK constraint can reference only columns in the same table.


Avatar billede Lasse Novice
18. oktober 2001 - 20:21 #5
SQL saetning:

create table AcervoDocumental(
IDacervodocumental int identity(1,1) primary key not null,
IDfondo tinyint not null FOREIGN KEY REFERENCES fondos(IDfondo),
seccion nvarchar(85) not null,
serie nvarchar(85) not null,
subserie nvarchar(85) not null,
lugar nvarchar(85) not null,
anosalida smallint not null CONSTRAINT anosalida_chk CHECK(anosalida >= 1850),
anoterminada smallint CONSTRAINT anoterminada_chk CHECK(anoterminada <= 2030 AND anoterminada>anosalida OR anoterminada IS NULL),
caja nvarchar(5) not null CONSTRAINT caja_chk CHECK(caja like \"[a-z][0-9][0-9][0-9][0-9]\"),
expediente smallint not null CONSTRAINT expediente_chk CHECK(expediente <= 999),
legajo tinyint not null CONSTRAINT legajo_chk CHECK(legajo <= 9),
foliosexpediente smallint not null CONSTRAINT foliosexpediente_chk CHECK(foliosexpediente <= 9999),
foliosdigitalizados smallint not null CONSTRAINT foliosdigitalizados_chk CHECK(foliosdigitalizados <= 999),
observaciones nvarchar(255) not null,
);

FEJL:

Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'anoterminada\' references another column, table \'AcervoDocumental\'.
Server: Msg 8141, Level 16, State 1, Line 1
Column CHECK constraint for column \'caja\' references another column, table \'AcervoDocumental\'.
Server: Msg 1759, Level 16, State 1, Line 1
Invalid column \'[a-z][0-9][0-9][0-9][0-9]\' is specified in a constraint or computed-column definition.
Server: Msg 1750, Level 16, State 1, Line 1
Could not create constraint. See previous errors.


Avatar billede torbenkoch Nybegynder
18. oktober 2001 - 20:21 #6
Eksempel følger lige her:

create table test
(  id int,
  id2 int,
  CONSTRAINT ABE CHECK (id2>id)
)
Avatar billede Lasse Novice
18. oktober 2001 - 20:22 #7
ok... jeg kigger paa det... takker.
Avatar billede torbenkoch Nybegynder
18. oktober 2001 - 20:24 #8
Så din:

anoterminada smallint CONSTRAINT anoterminada_chk CHECK(anoterminada <= 2030 AND anoterminada>anosalida OR anoterminada IS NULL),

skal altså bare være:

anoterminada smallint

og efter dit sidste komma skriver du så:

CONSTRAINT anoterminada_chk CHECK(anoterminada <= 2030 AND anoterminada>anosalida OR anoterminada IS NULL)


Avatar billede Lasse Novice
18. oktober 2001 - 20:26 #9
ok, jeg er nede paa een fejl...

Server: Msg 1759, Level 16, State 1, Line 1
Invalid column \'[a-z][0-9][0-9][0-9][0-9]\' is specified in a constraint or computed-column definition.
Server: Msg 1750, Level 16, State 1, Line 1
Could not create constraint. See previous errors.
Avatar billede torbenkoch Nybegynder
18. oktober 2001 - 20:27 #10
Jeps, prøv at bruge enkeltgnyffer \' istedet for anførselstegn \"
Avatar billede Lasse Novice
18. oktober 2001 - 20:27 #11
Det jeg vil er at denne kolonne skal vaere paa formen

char digig digig digig digig

Jeg har set et eksempel med det i online books(under alter table), men min constraint virker ikke...
Avatar billede Lasse Novice
18. oktober 2001 - 20:28 #12
yeahh.... det virkede.... takker for det...
Avatar billede Lasse Novice
18. oktober 2001 - 20:29 #13
det skal lige siges at det i online books er skrevet med anfoerselstegn :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester