[SQL]String concat levert een NULL waarde op

Pagina: 1
Acties:
  • 291 views sinds 30-01-2008
  • Reageer

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:52
Op dit moment snap ik het echt even niet meer. Ik moet een Naam uit een database halen, waarbij het voorvoegsel uit een andere kolom komt.

Stel de volgende SQL code voor:
SQL:
1
2
3
4
    SELECT
    (VoorVoeg1+ ' ' + Achternaam) as Naam
    FROM
    banktable_data

Dit werkt natuurlijk harstikke goed, ware het niet dat als VoorVoeg1 NULL is, dan wordt de hele 'Naam' als NULL getoond. Dat is niet de bedoeling natuurlijk.

Vervolgens met een IF statement gerommeld.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
IF(
    SELECT 
        VoorVoeg1 
    FROM
        banktable_data
    )IS NOT NULL
BEGIN
    SELECT
    (VoorVoeg1+ ' ' + Achternaam) as Naam
    FROM
    banktable_data
END

ELSE
BEGIN
    SELECT 
    (Achternaam) AS Naam 
    FROM 
    banktable_data
END

Alleen krijg ik daar een prachtige melding:
code:
1
2
3
4
Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

(50000 row(s) affected)

Het gaat hier om een MS SQL7 server.

Hieronder een stukje pseudo code zoals ik het eigenlijk voor ogen zie. Nu nog in een MS SQL jasje zien te krijgen.
code:
1
2
3
4
5
if voorvoeg1 = "" then
select achternaam from table
else
select voorvoeg1+' '+achternaam from table
end if

Wie heeft de/een tip voor mij?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik weet niet of MS SQL7 dit ondersteunt, maar het zou moeten werken:

SQL:
1
select IsNull(voorvoeg1,'')+' '+achternaam from table


En wat P_de_B zegt hieronder ;)

[ Voor 10% gewijzigd door RobIII op 18-08-2006 14:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
SET CONCAT_NULL_YIELDS_NULL OFF

Om het gedrag van concatten met nulls te wijzigen.

SQL:
1
SELECT ISNULL(Voorvoegsel,'') + Achternaam 

Voor eenmalig. ISNULL geeft de 2e parameter als resultaat als de eerste een NULL is. In dit geval een lege string, en die is wel te concatten met een andere string.

offtopic:
/trager, maar ik geef wel 2 opties + uitleg :P

[ Voor 8% gewijzigd door P_de_B op 18-08-2006 14:56 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:52
Potverdorie, de hele ISNULL vergeten :)

SQL:
1
2
SELECT LTRIM(ISNULL(Voorvoeg1,'') +' '+ Achternaam)
from banktable_data

Zo heb ik 'm nu. Bedankt voor de tip mannen!

Heart..pumps blood.Has nothing to do with emotion! Bored