31. december 2000 - 10:47Der er
12 kommentarer og 1 løsning
Fejl ved drop column med default værdi?!?!?
Her er hvad der sker: 1) Oprettelse af tabellen DataConn.Execute(\"CREATE TABLE liste33(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,html INT NOT NULL default(0),status int NOT NULL,email varchar(255) NOT NULL,oprettet datetime,slettet datetime,sendt datetime,historie varchar(4000),mailgruppe varchar(4000),rettet datetime,fornavn varchar(255),efternavn varchar(255))\")
-OK - ingen fejl
2) Tilfølejlse af nye felter uden default værdier: DataConn.Execute(\"ALTER TABLE liste33 add talfelt_1 int) -OK - ingen fejl DataConn.Execute(\"ALTER TABLE liste33 add talfelt_2 int) -OK - ingen fejl DataConn.Execute(\"ALTER TABLE liste33 add talfelt_3 int) -OK - ingen fejl DataConn.Execute(\"ALTER TABLE liste33 add talfelt_5 int) -OK - ingen fejl
3) Tilfølejlse af et nyt felt med default værdier: DataConn.Execute(\"ALTER TABLE liste33 add talfelt_4 int default(0)\") -OK - ingen fejl
4) Slet et par felter (Bemærk at tabellen ikke indeholder nogen poster) DataConn.Execute(\"ALTER TABLE liste33 DROP COLUMN talfelt_1\") -OK - ingen fejl DataConn.Execute(\"ALTER TABLE liste33 DROP COLUMN talfelt_2\") -OK - ingen fejl DataConn.Execute(\"ALTER TABLE liste33 DROP COLUMN talfelt_3\") -OK - ingen fejl DataConn.Execute(\"ALTER TABLE liste33 DROP COLUMN talfelt_4\") Fejl: Microsoft OLE DB Provider for ODBC Drivers error \'80040e14\'
[Microsoft][ODBC SQL Server Driver][SQL Server]The total row size (8866) for table \'liste33\' exceeds the maximum number of bytes per row (8060). Rows that exceed the maximum number of bytes will not be added.
Ifølge books online skal derfault constraints droppes før kolonnen kan droppes. Jeg kender ikke syntaksen, men du må give din constraint et navn når du laver den, og så derefter droppe den.
Du vil nok vælge at lave en stored procedure til at gøre det, da der bliver flere trin.
Fejlmeldingen giver ikke mening hvis jeg har ret, men det ville vist ikke være første gang vi er ude for det? :o)
i queryanalyzeren kan du se hvilke constraints der er i dine user tables.. så vil jeg umiddelbart tro at du skal lave noget lignende: ALTER TABLE liste33 DROP CONSTRAINT constraint navn
det skulle gøre det.. men jeg er ikke sikke på at default values bliver oprettet som constraints.
Godtsaa.. Det er fordi dine felter er for store - in row må maks indeholde 8060 bytes. Gør sådan her: Laver tabellen: CREATE TABLE liste33( ID INT IDENTITY(1,1) NOT NULL, html INT NOT NULL CONSTRAINT DF_Liste33_html DEFAULT(0), status int NOT NULL, email varchar(100) NOT NULL, oprettet datetime, slettet datetime, sendt datetime, historie varchar(3000), mailgruppe varchar(3000), rettet datetime, fornavn varchar(100), efternavn varchar(100), talfelt_1 int, talfelt_2 int, talfelt_3 int, talfelt_4 int NOT NULL CONSTRAINT DF_Liste33_talfelt_4 DEFAULT(0), talfelt_5 int,
CONSTRAINT PK_Liste33 PRIMARY KEY (ID), )
Sletter talfelt_4:
ALTER TABLE liste33 DROP DF_Liste33_Talfelt_4, COLUMN talfelt_4
SLUTFÆRDIG!
Hvis du skal have to felter med så meget data så læg dem ud i hver deres tabel og lav nogle relationer mellem dem
Hej smurfen, Jeg er meget ked af det - men jeg har meget svært ved at tro denne begænsning. Men hvis det er rigtigt vil jeg bede dig finde dokumentionen på microsofts hjemmeside hvor dette står. Altså: 1) Bevis på din påstand omkring de 8060 bytes - jeg ved godt det står i fejlen,men asp har det jo med at lave kreative fejl.
2) En oversigt over de forskellige variabel typer og hvor mange bytes disse fylder. F.eks. en int og en varchar(3000).
3) Det kan vel ikke være god database struktur at man skal lave en masse tabeller med relationer fordi størrelsen overstiger en standart - er det??
Jeg vil meget gerne have du svare på ovenstående også... så skal jeg nok bære over med at du ikke svare i ASP - selvom vi befinder os i denne kategori.
Jeg håber dette er ok - så skal jeg nok lade dig være resten af i år ;-))
1: søg på \'Maximum Capacity Specifications\' i sql-hjælpen. der står udtrykkeligt: Bytes per row: 8060
2: søg på \'Field Length\' i sql hjælpen og der vil stå: Data type Default length (characters) Char Length defined for the column Varchar Length defined for the column Nchar Twice the length defined for the column Nvarchar Twice the length defined for the column Text 0 Ntext 0 Bit 1 Binary Twice the length defined for the column + 1 Varbinary Twice the length defined for the column + 1 Image 0 Datetime 24 Smalldatetime 24 Float 30 Real 30 Int 12 Bigint 19 Smallint 7 Tinyint 5 Money 30 Smallmoney 30 Decimal 41* Numeric 41* Uniqueidentifier 37 Timestamp 17
Data type Default length (characters) bit 1 binary Length defined for the column varbinary Length defined for the column image 0 datetime 8 smalldatetime 4 float 8 real 4 int 4 bigint 8 smallint 2 tinyint 1 money 8 smallmoney 4 decimal * numeric * uniqueidentifier 16 timestamp 8
3. Det var for at omgå databegrænsningen. Jeg ville gøre det uden at blinke.
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.