Problem mit "concat null yields null"

26/01/2009 - 08:39 von Lutz Uhlmann | Report spam
Hallo NG!

Wenn ich folgendes SQL-Skript im SQL-Server 2005 MS ausführe, führt die
Zeichenverkettung zu einem NULL-Wert obwohl die entsprechende Option der
Datenbank ausgeschaltet ist.

USE mydata
GO
SELECT ID, SCHLBEZ, BEZ, ANLNR, SCHLBEZ + ' ... ' + BEZ + ' (' + ANLNR + ')'
AS ANLTEXT
FROM schema.a_inventar
WHERE KST='9000' AND StatusKen<>9
ORDER BY SCHLBEZ,BEZ
GO
115418, "Produktionshallen", "B70", NULL, NULL
109879, "Sonderbauten Versorgungsturm für die Zulage in Halle 5", "0106280",
"Sonderbauten ... Versorgungsturm für die Zulage in Halle 5 (0106280)"

Wenn ich in den Datenbank-Optionen nachschaue steht da auch wie gewünscht
OFF
sp_dboption 'mydata', 'concat null yields null'
GO
"concat null yields null", "OFF"


Setze ich allerdings ein
SET CONCAT_NULL_YIELDS_NULL OFF;
GO
direkt vor mein Skript, dann funktioniert das auf einmal und liefert
korrekterweise
115418, "Produktionshallen", "B70", NULL, "Produktionshallen ... B70 ()"

Wo liegt hier der Fehler???

Lutz
 

Lesen sie die antworten

#1 Christa Kurschat
26/01/2009 - 09:12 | Warnen spam
Hallo Lutz,

"Lutz Uhlmann" schrieb im Newsbeitrag
news:%
Hallo NG!

Wenn ich folgendes SQL-Skript im SQL-Server 2005 MS ausführe, führt die
Zeichenverkettung zu einem NULL-Wert obwohl die entsprechende Option der
Datenbank ausgeschaltet ist.

USE mydata
GO
SELECT ID, SCHLBEZ, BEZ, ANLNR, SCHLBEZ + ' ... ' + BEZ + ' (' + ANLNR +
')' AS ANLTEXT
FROM schema.a_inventar
WHERE KST='9000' AND StatusKen<>9
ORDER BY SCHLBEZ,BEZ
GO
115418, "Produktionshallen", "B70", NULL, NULL
109879, "Sonderbauten Versorgungsturm für die Zulage in Halle 5",
"0106280", "Sonderbauten ... Versorgungsturm für die Zulage in Halle 5
(0106280)"

Wenn ich in den Datenbank-Optionen nachschaue steht da auch wie gewünscht
OFF
sp_dboption 'mydata', 'concat null yields null'
GO
"concat null yields null", "OFF"


Setze ich allerdings ein
SET CONCAT_NULL_YIELDS_NULL OFF;
GO
direkt vor mein Skript, dann funktioniert das auf einmal und liefert
korrekterweise
115418, "Produktionshallen", "B70", NULL, "Produktionshallen ... B70 ()"

Wo liegt hier der Fehler???



Du solltest Dich nicht auf die Option verlassen.
Je nachdem, welcher Client die proc ausführt, wird das u.U,. übersteuert.

Verwende, wenn die Möglichkeit von NULL-Werten besteht, bei der
Conatinierung grundsàtzlich isnull() oder coalesce(), das ist sicherer.

Gruß
Christa
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.org

Ähnliche fragen