convert(varchar(4),@zaehler)

25/07/2009 - 17:00 von Johannes Cramer | Report spam
Hallo allerseits,

Damit ich den Vorteil von Bulk Insert nachvollziehen kan, möchte ich gerne
meine Tabellen wie folgt füllen:

declare @zaehler int
set @zaehler = 1
while @zaehler < 1000
begin
insert into DB.dbo.tbl_Künstler(KünsterlName, KünstlerVorname,
KünstlerGeb)
values ('Künstler' + convert(varchar(4),@zaehler), 'Michael',
GETDATE())
print @zaehler
set @zaehler = @zaehler + 1
end
select 'Jetzt sind 1.000 Neue Künstler drin'

Kopfzerbrechen bereitet mir der Befehl Convert(varchar(4),@zaehler).
Ich dachte, die Zahl hinter der Klammer gibt die Lànge des Strings an, so
steht es in der Online-Hilfe.
Wenn ich die Zahl "1000" habe und ich konvertiere die Zahl "1000" in einen
Textstring, dann müsste doch die Lànge des Strings "4" sein. Mache ich das,
gibt er mir ab @Zaehler = 10 folgenden Fehler aus:
(1 Zeile(n) betroffen)
9
Meldung 8152, Ebene 16, Status 4, Zeile 6
Zeichenfolgen- oder Binàrdaten würden abgeschnitten.
Die Anweisung wurde beendet.
10
Gebe ich aber eine 1 ein --> convert(varchar(1),@zaehler), dann klappt
das.
Kann mir da geholfen werden?
Viele Grüße
Johannes
 

Lesen sie die antworten

#1 Elmar Boye
25/07/2009 - 17:44 | Warnen spam
Hallo Johannes,

"Johannes Cramer" schrieb ...
Kopfzerbrechen bereitet mir der Befehl Convert(varchar(4),@zaehler).
Ich dachte, die Zahl hinter der Klammer gibt die Lànge des Strings an, so
steht es in der Online-Hilfe.



Die (max.) Lànge der Felddefinition, belegt wird allerdings
nur der erforderliche Platz:

SELECT DATALENGTH(CONVERT(varchar(4), 1)) AS [Bei 1],
DATALENGTH(CONVERT(varchar(4), 1000)) AS [Bei 1000]

Wenn ich die Zahl "1000" habe und ich konvertiere die Zahl "1000"
in einen Textstring, dann müsste doch die Lànge des Strings "4" sein.
Mache ich das, gibt er mir ab @Zaehler = 10 folgenden Fehler aus:



Das eigentliche Problem dürfte die Definiton für Deine
Spalte Kuenstlername sein, die ist sehr wahrscheinlich
definiert als VARCHAR(10) :

Meldung 8152, Ebene 16, Status 4, Zeile 6
Zeichenfolgen- oder Binàrdaten würden abgeschnitten.



und dann beschwert sich der SQL Server ab zwei Stellen
(wenn man ein Leerzeichen dazu nimmt)

SELECT DATALENGTH('Künstler ' + CONVERT(varchar(4), 1)) AS [Bei 1],
DATALENGTH('Künstler ' + CONVERT(varchar(4), 10)) AS [Bei 10],
DATALENGTH('Künstler ' + CONVERT(varchar(4), 1000)) AS [Bei 1000]

Gruß Elmar

Ähnliche fragen