INSERT-Problem mit langer Zeichenfolge

11/02/2008 - 09:59 von Thomas Schremser | Report spam
Hallo allerseits!

Ich habe 2 Tabellen auf einem SQL Server 2005, die so aussehen:

CREATE TABLE st2per
(
nr int,
famname char(40),
vorname char(40),
geschl char(1)
)

CREATE TABLE st2pak
(
nr int,
titel char(60),
grd_titel char(8)
)

Die Daten aus diesen Tabellen sollen nun in eine weitere Tabelle eingefügt
werden. Diese ist so definiert:

CREATE TABLE stf.PersonHistory
(
PersonID int,
BriefAnrede nvarchar(160),
AdressAnrede nvarchar(80)
)

Den Import der Daten möchte ich mit folgendem Statemen ausführen:

INSERT INTO stf.PersonHistory
(
PersonID,
BriefAnrede,
AdressAnrede
)
SELECT P.nr AS PersonID,
SUBSTRING
(
'Sehr geehrte' +
CASE
WHEN P.geschl = 'M'
THEN 'r Herr '
ELSE ' Frau '
END +
LTRIM(A.titel + ' ' + A.grd_titel) + ' ' +
P.vorname + ' ' +
P.famname,
1,
160
) AS BriefAnrede,
SUBSTRING
(
CASE
WHEN P.geschl = 'M'
THEN 'Herrn '
ELSE 'Frau '
END +
CHAR(13) + CHAR(10) +
LTRIM(A.titel + ' ' + A.grd_titel) + ' ' +
P.vorname + ' ' +
P.famname,
1,
80
) AS AdressAnrede
FROM st2per P
INNER JOIN st2pak A ON A.nr = P.nr

Das schlàgt aber mit der Meldung

"Meldung 8152, Ebene 16, Status 13, Zeile 55
Zeichenfolgen- oder Binàrdaten würden abgeschnitten."

fehl. Ich habe die Resultierenden Strings geprüft, die Briefanrede ist
maximal 74 Zeichen lang, die Adressanrede 63. Damit müßten eigentlich alle
Daten auch ohne SUBSTRING importiert werden können und mit SUBSTRING sollte
es IMHO doch ohnehin kein Problem geben.

Was làuft hier falsch?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler
 

Lesen sie die antworten

#1 Christoph Ingenhaag
11/02/2008 - 10:22 | Warnen spam
"Thomas Schremser" wrote:

Hallo allerseits!

Ich habe 2 Tabellen auf einem SQL Server 2005, die so aussehen:

CREATE TABLE st2per
(
nr int,
famname char(40),
vorname char(40),
geschl char(1)
)

CREATE TABLE st2pak
(
nr int,
titel char(60),
grd_titel char(8)
)

Die Daten aus diesen Tabellen sollen nun in eine weitere Tabelle eingefügt
werden. Diese ist so definiert:

CREATE TABLE stf.PersonHistory
(
PersonID int,
BriefAnrede nvarchar(160),
AdressAnrede nvarchar(80)
)

Den Import der Daten möchte ich mit folgendem Statemen ausführen:

INSERT INTO stf.PersonHistory
(
PersonID,
BriefAnrede,
AdressAnrede
)
SELECT P.nr AS PersonID,
SUBSTRING
(
'Sehr geehrte' +
CASE
WHEN P.geschl = 'M'
THEN 'r Herr '
ELSE ' Frau '
END +
LTRIM(A.titel + ' ' + A.grd_titel) + ' ' +
P.vorname + ' ' +
P.famname,
1,
160
) AS BriefAnrede,
SUBSTRING
(
CASE
WHEN P.geschl = 'M'
THEN 'Herrn '
ELSE 'Frau '
END +
CHAR(13) + CHAR(10) +
LTRIM(A.titel + ' ' + A.grd_titel) + ' ' +
P.vorname + ' ' +
P.famname,
1,
80
) AS AdressAnrede
FROM st2per P
INNER JOIN st2pak A ON A.nr = P.nr

Das schlàgt aber mit der Meldung

"Meldung 8152, Ebene 16, Status 13, Zeile 55
Zeichenfolgen- oder Binàrdaten würden abgeschnitten."

fehl. Ich habe die Resultierenden Strings geprüft, die Briefanrede ist
maximal 74 Zeichen lang, die Adressanrede 63. Damit müßten eigentlich alle
Daten auch ohne SUBSTRING importiert werden können und mit SUBSTRING sollte
es IMHO doch ohnehin kein Problem geben.

Was làuft hier falsch?

TIA

Grüße
Thomas

Any problem in computer science can be solved with another layer
of indirection. But that usually will create another problem.
David Wheeler



Hi Thomas,

schau dir mal die Datentypen an:

CREATE TABLE stf.PersonHistory
(
PersonID int,
BriefAnrede nvarchar(160),
AdressAnrede nvarchar(80)
)

nvarchar ist unicode und braucht pro Zeichen 2 Bytes...

Vg
Christoph

Ähnliche fragen