Avatar billede sql_pede Nybegynder
31. december 2000 - 10:47 Der 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.

Avatar billede sql_pede Nybegynder
31. december 2000 - 12:26 #1
1) Hvad skyldes denne fejl?
2) Hvordan undgår jeg denne fejl?
Avatar billede ldanielsen Nybegynder
31. december 2000 - 12:42 #2
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)

PS: Jeg går ud fra at det er MSSQL vi snakker om
Avatar billede sql_pede Nybegynder
31. december 2000 - 12:53 #3
jeps - mssql.

Jeg aner bare ikke hvordan man droppe defaulten
Avatar billede smurfen Nybegynder
01. januar 2001 - 13:54 #4
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.
Avatar billede smurfen Nybegynder
01. januar 2001 - 13:56 #5
og bagefter droppe din column..
Avatar billede sql_pede Nybegynder
01. januar 2001 - 13:57 #6
hvor svært kan det være... det er ikke 30 point vi spiller om....

Du har hele koden deroppe - du ændre bare så det virker - så får du de 200 points
Avatar billede sql_pede Nybegynder
01. januar 2001 - 13:57 #7
ups - endda 300 points...
Avatar billede smurfen Nybegynder
01. januar 2001 - 16:10 #8
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
Avatar billede smurfen Nybegynder
01. januar 2001 - 16:12 #9
nu vil jeg satme have point :)
Avatar billede sql_pede Nybegynder
01. januar 2001 - 21:53 #10
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 ;-))
Avatar billede smurfen Nybegynder
01. januar 2001 - 23:58 #11
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.
Avatar billede sql_pede Nybegynder
02. januar 2001 - 09:15 #12
Det er satme godt.

Tak for hjælpen ;-)
Avatar billede smurfen Nybegynder
02. januar 2001 - 10:27 #13
np der.
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
Kurser inden for grundlæggende programmering

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