Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Stränghantering med tSQL

Postades av 2002-05-21 17:21:50 - Rickard Nordström, i forum sql-server/msde, Tråden har 3 Kommentarer och lästs av 882 personer

Har ett litet bekymmer. Och när man har haft det ett tag så tar man sig hit och ställer sin fråga här =)

Sitter och meckar med en function som ska returnera alla statusnamn i en enda sträng. Men det vill sig inte.


SET @str= @str + @str2 - returnerar NULL
men
SET @str= @str2 - returnerar det sista statusnamnet i cursorn.

Är det så att när man kör en SET så nollställs värdet på variablen som man skall tilldela innan själva tilldelningen sker? (Vilket det inte gör i vårt kära VB.)


<code>
CREATE FUNCTION getStatus ()
RETURNS varchar(4096)
AS
BEGIN
DECLARE @str2 varchar(4096)
Declare @str varchar(4096)
DECLARE Status CURSOR FOR
SELECT tStatus.statusName From tStatus order by tStatus.statusName desc
OPEN status

WHILE @@FETCH_STATUS = 0
BEGIN

SET @str= @str + @str2

FETCH NEXT FROM status INTO @str2
END
CLOSE status
DEALLOCATE status

return(@str)
end
</code>

tStatus:
CREATE TABLE [tStatus] (
[StatusId] [int] IDENTITY (1, 1) NOT NULL ,
[StatusName] [varchar] (50) COLLATE Finnish_Swedish_CI_AS NULL ,
[StatusDescription] [varchar] (2000) COLLATE Finnish_Swedish_CI_AS NULL
) ON [PRIMARY]


Svara

Sv: Stränghantering med tSQL

Postades av 2002-05-21 19:29:27 - Christoffer Hedgate

Finns det några null-värden i kolumnen? Jag såg nämligen att du tillåter null-värden i den, och beroende på vilka databasinställningar databasen har så kan problemet bero på detta. Det finns nämligen en option som heter 'concat null yields null', vilken innebär att om man konkatenerar en sträng med ett null-värde så blir resultatet null. Alltså, även om du bara har ett nullvärde i tabellen så kommer slutresultatet att bli null.

För att byta ut null mot en tom sträng kan du köra:

SET @str = ISNULL(@str, '') + ISNULL(@str2, '')

istället för
SET @str= @str + @str2

Kör nedanstående för att kolla inställningen:

sp_dboption 'database', 'concat null yields null'

Kör nedanstående för att ändra den:

sp_dboption 'database', 'concat null yields null', 'false'


Hmmmm...nu när jag tänker efter så ser jag problemet. @str och @str2 är inte initierade när du går in i loopen, och du kör din fetch efter första tilldelningen, så de kommer bägge att vara null vid första tilldelningen. Alltså får du ett null-värde som följer med hela tiden. Ändra din deklaration till nedanstående så ska det nog fungera (men testa gärna att kolla inställningen ovan och prova att ändra den på test, även om den bör vara true annars):

DECLARE @str2 varchar(4096)
Declare @str varchar(4096)
SET @str = ''
SET @str2 = ''


Svara

Sv: Stränghantering med tSQL

Postades av 2002-05-22 08:46:59 - Lars Berg

CREATE FUNCTION getStatus ()
RETURNS varchar(4096)
AS

DECLARE @str varchar(4096)
SELECT @str = COALESCE(@str,'') + statusName from tstatus order by statusName
return @str


Svara

Sv: Stränghantering med tSQL

Postades av 2002-05-23 17:49:20 - Rickard Nordström

Tackar!

Jo, det var helt korrekt att null + stäng ger null. När de var initierade samt att jag gjorde en koll så att det som lades till inte kunde vara null så gick det som smort..

/Rickard


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 616
27 953
271 709
5 775
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies