[MSSQL05] Insert probleem... filesize?

Pagina: 1
Acties:

  • Tsjilp
  • Registratie: November 2002
  • Niet online
Ik draai hier MS SQL Server 2005 in combinatie met SQL Server Management Studio Express (CTP, versie 9.00.1399.00) Hierin heb ik een database met de tabel tbl_news, deze heeft de volgende velden:
id (int, autonummering, PK)
title (varchar(50))
news (text)
category (int)
date (datetime)

Nu kan ik hierin geen data invoeren, na 1 record krijg ik de foutmelding:

No row was updated.
The data in row 2 was not committed.
Error Source: .Net SqlClient Data Provider.
Error Message: String or binary data would be truncated.

Nu lijkt het me sterk dat de tekst in 'news' te lang is (text kan iets van 4gb aan).

Later is gebleken dat de records wel toegevoegd werden, maar niet meer te verwijderen waren.
Door een SQL Delete qurey te schrijven heb ik ze er uiteindelijk wel uit gekregen.

Vervolgens heb ik naar de filesize van de Database gekeken. Deze stond op 2mb, autogroth by 1mb.

Omdat ik dacht dat mijn tabel wellicht corrupt was heb ik een nieuwe aangemaakt. Tevens heb ik de filesize vergroot naar 10mb, wat eerst wel genog moet zijn (het is een test database waar iets van 10 nieuwsberichten in komen).

Vervolgens ben ik weer begonnen met het invoeren van data, maar nu door middel van SQL query's. 4 query's gingen goed, de 5e bezorgde mij weer dezelfde prachtige error. Echter wordt de data nu niet ingevoerd.

Iemand bekend met het probleem?

Ik vermoed dat de filesize er iets mee te maken heeft, omdat in het eerste geval de database 3MB groot was en 0,77 mb over had.
Nu is de database 11MB groot en heeft hij 8,77MB over. Het lijkt er dus op dat hij niet over de 2,23 MB wil gaan. 8)7

De enige oplossing die ik vooralsnog heb is terug te gaan naar MSSQL2000

Raar... Is zo gek nog niet


  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
Welke andere waarden probeer je te inserten?

title is bijvoorbeeld een varchar(50) als je daar meer dan 50 tekens in probeert te proppen, dan krijg je ook zo'n foutmelding.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 19-01 13:20

Gé Brander

MS SQL Server

Er is ook nog een service pack 1 te verkrijgen. Wellicht handig om die te installeren, misschien dat de fout, als dat het al is, dan ook opgelost is.

Hoe groot zijn je records in totaal die je probeert te inserten? (grootte per stuk dus)

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • whoami
  • Registratie: December 2000
  • Laatst online: 20-02 21:53
Hoe probeer je die waardes toe te voegen ?

https://fgheysels.github.io/


  • Tsjilp
  • Registratie: November 2002
  • Niet online
Wirf schreef op maandag 12 juni 2006 @ 15:45:
Welke andere waarden probeer je te inserten?

title is bijvoorbeeld een varchar(50) als je daar meer dan 50 tekens in probeert te proppen, dan krijg je ook zo'n foutmelding.
Blijkt in dit geval het probleem te zijn 8)7 8)7 8)7 8)7

MAARR.....
In de eerste tabel versie had ik beide velden (title & message) op text staan en kreeg ik ook deze foutmelding. Ik hoop dat het probleem nu opgelost is, maar heb er weinig vertrouwen in...

Die SP1 zal ik ook eens installeren


Wat ik overigens ook niet begrijp: als SQL Server een foutmelding geeft bij een INSERT, zou je verwachten dat de record niet wordt toegevoegd. Echter, de autonummering loopt wel vrolijk door... ??
Niet dat het erg is, maar wel vreemd :?
whoami schreef op maandag 12 juni 2006 @ 15:51:
Hoe probeer je die waardes toe te voegen ?
Een voorbeeldquery:
code:
1
INSERT INTO tbl_news (title, message, category, date) VALUES ('Ouders zitten maandenlang naast ''verkeerde'' zoon in coma', '<p>WENEN - Een Oostenrijks ouderpaar heeft meer dan vier maanden gewaakt naast een man in coma, per abuis in de veronderstelling dat het om hun 18-jarige zoon ging. Pas toen de man ontwaakte en Servo-Kroatisch ging spreken, werd de persoonsverwisseling ontdekt.</p><p>Dit is woensdag van medische bronnen in Klagenfurt vernomen. Bij een auto-ongeluk op 4 februari waren twee doden en een zwaargewonde gevallen. De ouders hadden de overlevende ten onrechte geïdentificeerd als hun zoon.</p><p>Het blijkt nu om een 17-jarige Bosniër te gaan, een vriend van hun zoon. De Bosnische ouders hadden de Oostenrijker al per abuis begraven als ware het hun zoon.</p>', 2, '6/12/2006')


Berichtjes zijn dus gecopy - pasted van nu.nl, om je een idee te geven van de grootte.

[ Voor 45% gewijzigd door Tsjilp op 12-06-2006 15:57 ]

Raar... Is zo gek nog niet


  • whoami
  • Registratie: December 2000
  • Laatst online: 20-02 21:53
De fout die je krijgt is geen 'error', maar een warning. (String or binary ... would be truncated).

Hoe bouw je die query op ? Ik hoop dat je gebruik maakt van parametrized queries, ipv de waardes die je wilt inserten aan je SQL string te 'plakken' en te escapen ?

Autonummering loopt altijd gewoon door dacht ik, ook als je een rollback uitvoert op een transactie.
Stel, je start een transactie, je insert een record dat als id 1 zou krijgen, je rollbacked die transactie.
Daarna doe je een nieuwe insert in die tabel, en doe je een commit. Je nieuwe record zal dan niet id 1 hebben, maar id 2.

https://fgheysels.github.io/


  • Tsjilp
  • Registratie: November 2002
  • Niet online
Ik ram de waarden gewoon via de default view (weet niet hoe dat ding heet) erin. (Heb het ook middels bovenstaande query geprobeerd). Omdat het om een test database gaat lijkt mij de manier van invoeren niet van groot belang).
De database moet ervoor zorgen dat de site wat content bevat om mee te spelen.

Als die melding een warning is, dan zou hij de record toch moeten toevoegen? Dat doet ie dus niet.Bij een warning zou je imho moeten kunnen kiezen tussen OK en Cancel, ik kan alleen OK kiezen.

Over die autonummering: Volgens mij mysql dat niet, die blijft netjes doornummeren en haalt de ID dus ook weg bij een rollback.

Raar... Is zo gek nog niet


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Wat is netjes ...

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Tsjilp
  • Registratie: November 2002
  • Niet online
Als een INSERT query wordt teruggedraaid door middel van een ROLLBACK is het logisch dat de Autonummering niet wordt aangetast door de INSERT cq ook wordt teruggedraaid door de ROLLBACK.

imho is dat het gedrag wat je mag verwachten van rollback.

Raar... Is zo gek nog niet


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Aan de andere kant verwacht ik dat een id maar één keer wordt uitgegeven. Dat is dus bij MySQL niet het geval.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
Tsjilp schreef op maandag 12 juni 2006 @ 17:03:
[...]


Als een INSERT query wordt teruggedraaid door middel van een ROLLBACK is het logisch dat de Autonummering niet wordt aangetast door de INSERT cq ook wordt teruggedraaid door de ROLLBACK.

imho is dat het gedrag wat je mag verwachten van rollback.
Vergeet niet dat een database meestal door meerdere processen tegelijkertijd wordt aangesproken, het volgende scenario is dan ook niet ondenkbaar:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Process 1:
begin tran
insert into een_tabel
select
--auto_id,
'een_waarde'
                                         Process 2:
                                         insert into een_tabel
                                         select
                                         --Auto_id,
                                        'Nog een waarde'
Process 1:
//OMG!!11  I made an error!
rollback tran


Wat moet de database nu doen? Als je het op jouw manier "netjes" zou willen doen, dan zal je het uitgegeven id aan process 2 moeten verlagen (=bad), of anders in ieder geval bij moeten houden op het moment dat er een rollback wordt gedaan of, en hoeveel, andere inserts er al gedaan zijn op die database (=overhead)
Doortellen is de makkelijkste manier, dat er daardoor gaten in de nummering kunnen komen is niet mooi, maar gaten zijn sowieso onvermijdelijk (door delete's)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
whoami schreef op maandag 12 juni 2006 @ 16:03:
De fout die je krijgt is geen 'error', maar een warning. (String or binary ... would be truncated).
Afbeeldingslocatie: http://img452.imageshack.us/img452/5496/errors1nl.png

:+

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • whoami
  • Registratie: December 2000
  • Laatst online: 20-02 21:53
hmm, ok foutje. :+

https://fgheysels.github.io/


  • Tsjilp
  • Registratie: November 2002
  • Niet online
problem seems to be solved....

Raar... Is zo gek nog niet

Pagina: 1