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


MsSQL 7.0/2000: utparameter i en sp från en sträng

Postades av 2003-08-18 13:54:44 - Emma Magnusson, i forum databaser, Tråden har 5 Kommentarer och lästs av 796 personer

Hej,

Jag har skapat en stored procedure som jag använder för att söka fram ett företag.
Sökfunktionen fungerar utmärkt, problemet uppstår när jag vill fånga utparametern
i en annan procedur, då det framkom att min utparameter alltid returnerar noll
oavsett vad företagsindexet är. Nedan följer ett exempel på min kod. Hade varit tacksam
för förslag på lösningsförslag. Visar även de olika försök jag gjort:

<code>
CREATE PROCEDURE spFindForetag
-- ========
--proceduren lägger till Företag
--
(@namn VARCHAR(100) = '',
@orgnr VARCHAR(50) = '',
@gatuadress VARCHAR(50) = '',
@postnr VARCHAR(10) = '',
@postort VARCHAR(50) = '',
@telenr VARCHAR(50) = '',
@ansvarig NUMERIC(9) = 0,
@segment NUMERIC(9) = 0,
@kundid NUMERIC(9) = 0 OUTPUT )
AS
--Skapad 20030814 Emu


DECLARE @ErrorSave INT
DECLARE @villkor VARCHAR(1000)
--DECLARE @kundid NUMERIC(9)

SET @ErrorSave = 0
SET @villkor = ''
--SET @kundid = 0


--Stänger av radräknaren
--SET NOCOUNT ON

--kontrollerar vilka parametrar som har skickats in. De enda som måste vara identiskt korrekta är ansvarig och segment. På allt
--annat söker programmet på wildcard + tecken + wildcard
IF @namn > '' AND @namn IS NOT NULL
SET @villkor = 'namn LIKE ' + CHAR(39) + '%' + @namn + '%' + CHAR(39)
IF @gatuadress > '' AND @gatuadress IS NOT NULL
SET @villkor = @villkor + ' AND gatuadress LIKE ' + CHAR(39) + '%' + @gatuadress + '%' + CHAR(39)
IF @orgnr > '' AND @orgnr IS NOT NULL
SET @villkor = @villkor + ' AND orgnr LIKE ' + CHAR(39) + '%' + @orgnr + '%' + CHAR(39)
IF @postnr > '' AND @postnr IS NOT NULL
SET @villkor = @villkor + ' AND postnr LIKE ' + CHAR(39) + '%' + + @postnr + '%' + CHAR(39)
IF @postort > '' AND @postort IS NOT NULL
SET @villkor = @villkor + ' AND postort LIKE ' + CHAR(39) + '%' + @postort + '%' + CHAR(39)
IF @telenr > '' AND @telenr IS NOT NULL
SET @villkor = @villkor + ' AND telenr LIKE ' + CHAR(39) + '%' + @telenr + '%' + CHAR(39)
IF @ansvarig > 0 AND @ansvarig IS NOT NULL
SET @villkor = @villkor + ' AND ansvarig = ' + CAST(@ansvarig AS VARCHAR)
IF @segment > 0 AND @segment IS NOT NULL
SET @villkor = @villkor + ' AND segment = ' + CAST( @segment AS VARCHAR)

--ser till att villkoret blir rätt
IF left(@villkor,4) = ' AND'
SET @villkor = right(@villkor, len(@villkor) -4)



-----8<----------8<----------8<----------8<----------8<----------8<----------8<-----
Här det blir fel!!!


--och konkatenerar villkoret med söksträngen
SET @villkor ='SELECT uid FROM tblForetag WHERE ' + @villkor

--har även försökt med nedanstående istället för ovanstående rad:
--SET @villkor ='SELECT @kundid = uid FROM tblForetag WHERE ' + @villkor
--vilket ger felet att programmet påstår att @kundid inte är deklarerad (spelar ingen
--roll om jag deklarerat @kundid i huvudet eller som en lokal parameter.

--utför sökningen
print @villkor
EXECUTE (@villkor)
-- samt att jag har försökt
--EXECUTE @kundid = (@villkor)
--vilket inte ens går att kompilera


-----8<----------8<----------8<----------8<----------8<----------8<----------8<-----



--returnera @kundid
PRINT 'kundid: ' + cast(@kundid as varchar)
RETURN @kundid

IF @@ERROR <> 0
BEGIN
SET @ErrorSave = @@ERROR
RETURN @ErrorSave
END


--SET NOCOUNT OFF


</code>

MVH Emma


Svara

Sv: MsSQL 7.0/2000: utparameter i en sp från en sträng

Postades av 2003-08-18 16:41:10 - Andreas Hillqvist

Har du anget OUTPUT på anropet till din sp?

T.Ex:

EXEC spDoStuff @ValueIWant OUTPUT


Svara

Sv: MsSQL 7.0/2000: utparameter i en sp från en sträng

Postades av 2003-08-19 14:37:21 - Emma Magnusson

Ja, det innebär att jag kan få svaret till en annan sp - men om jag vill ha svaret
till ett rs hur är det möjligt att göra då?

Har just nu löst det hela med en cursor - men det fungerar bara så länge anropet sker
från en annan sp - jag kommer ibland även ha behov av att ställa frågan direkt från
programmet.

/Emma


Svara

Sv: MsSQL 7.0/2000: utparameter i en sp från en sträng

Postades av 2003-08-19 16:02:10 - Mikael Sälle

Jag är inte säker på att jag förstår vad du är ute efter men om du vill returnera KundId för nya kunder kan du göra såhär

Alt. 1
Skapa en insert trigger på tabellen som gör

SELECT KundId FROM Inserted

Tabellen Inserted skapas automatiskt av SQL Server under själva inserten och kan innehålla flera poster. Detta kan orsaka en del negativa sidoeffekter i andra lägen så alternativ 2 nedan kanske är bättre.

Alt. 2
I slutet av din procedur så gör du RETURN @kundid skriv istället
SELECT KundID = @kundid. Detta kommer skapa ett resultatset men en post med ett fält med namnet KundID


Svara

Sv: MsSQL 7.0/2000: utparameter i en sp från en sträng

Postades av 2003-08-20 12:35:22 - Emma Magnusson

Om jag vill returnera kundId för nya kunder behöver jag inte hela den ovan angivna
proceduren... Den är till för att returnera id på den kund man angett i inparametrarna
oavsett vilka indata som ges.

Problemet har varit att eftersom jag konkatenerar villkoren efter hand i sp:n så kan
jag inte göra en enkel SELECT @kundid = uid FROM tblForetag [....] inte heller kan jag
tilldela @kundid i EXEC-satsen eftersom jag valt att exekvera en textsträng och därför
använder mig av () runt den sats som ska utföras.

När jag anropar sp:n från en annan procedur får jag ut @kundid precis som jag
förväntat mig. Anropar jag sp:n ifrån queryanalyzern med @utdata deklarerat och
avsett att ta emot utdatan så kommer den parametern fortfarande att vara NULL eller
'' beroende på om jag initierat den eller ej i QA-fönstret. Jag vill helt enkelt ha ett sätt
att få samma output i QA som jag får i anropande sp:s.

/Emma


Svara

Sv: MsSQL 7.0/2000: utparameter i en sp från en sträng

Postades av 2003-08-20 12:55:50 - Mikael Sälle

Kom på en fuling till...

CREATE TABLE #tmp (uid numeric(9))

INSERT INTO #tmp (uid)
EXECUTE (@villkor)

SELECT @kundid = uid FROM #tmp

/S@llad


Svara

Nyligen

  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av

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 570 867
27 962
271 767
494
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