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


Fnuttar inparameter

Postades av 2006-03-04 16:27:17 - Joakim Schlangberg, i forum sql-server/msde, Tråden har 2 Kommentarer och lästs av 925 personer

Hej!

Jag vill skicka en sträng in till en storedprocedure som väljer ut enligt mina kriterier i strängen.
Jag fattar inte riktigt hur jag ska skriva för att det som tolkas rätt?

Del av sp:n:
WHERE [Place] IN(@Ort)


En "vanlig" IN ser juh ut såhär: IN('xx','xx','xx')

Hur ska jag bygga upp min sträng så att den kan användas som inparameter i sp:n?

/Tjocke


Svara

Sv: Fnuttar inparameter

Postades av 2006-03-06 10:34:37 - Marcus Gus

Du vill alltyså dynamiskt ange ett antal olika sökkriterier. det finns ett antal mer elelr mindre bra sätt att göra det. Tex kan man ange param1, parma2, param3 osv till så många som man kan ha (att det är en otroligt korkad lösning hoppas jag framgår ;-)).

Jag föredrar att skicka in XML-dokument med sökvillkor och det skulle då kunna set ut så här
<code>
CREATE Procedure GetStuffyByStatus(@StatusCodes ntext = null) /* kan även skickas som varchar */

DECLARE @XmlHandle int

IF @StatusCodes IS NOT NULL
BEGIN
CREATE TABLE #status(IDStatus int)

EXEC sp_xml_preparedocument @XmlHandle OUTPUT, @StatusCodes

insert into #status
SELECT status
FROM OPENXML (@XmlHandle, '/root/Item',1) WITH (staus int)

EXEC sp_xml_removedocument @XmlHandle

select * from order where statusid in [(select distinct(IDStatus) from #status )]
END
ELSE
BEGIN
select * from order
END
</code>

Och ett XMLdokument som ser ut ungefär så här:
<code>
XMLdokumentet ser ut så här (ungefär)
<root>
<Item status="1"/>
<Item status="2"/>
<Item status="3"/>
</root>
</code>

Ett anmat sät är att ta strängen du har och splitta upp dem och försöka få dem som parameter till IN-satsen.

EDIT:
För att svara på den egentliga frågan, "Hur ska jag bygga upp min sträng så att den kan användas som inparameter i sp:n? ". Skickar du in den som en sträng så blir det just det, det du får hitta på är någon anna fiffig lösning, tex skicak in ett XML-dokument, ha separatorer i din tex och sedan splitta upp den till någon sorts array i din SP och skicka den som parameter.


Svara

Sv: Fnuttar inparameter

Postades av 2006-03-06 13:58:09 - Ola Lindfeldt

För att lösa det så i en SP måste du använda execute
typ

declare @ID_Lista varchar(8000)
SET @ID_Lista = " 'aa','bb', 'cc' "
execute ('SELECT * FROM T WHERE X IN(' + @ID_Lista + ')' )

Det fungerar bra men det finns två nackdelar.
1. Stored proceduren kan inte optimeras på samma sätt som vanliga
då det är dynamisk SQL som körs. Oftast är det inget stort problem.
2. Du blir begränsad till en 8000 tecken lång lista i det här fallet.
(kan man komma runt genom att ha IDLista1 + IDLista2 .. osv).

Ett annat alternativ som jag har sett är att man stoppar in den komma-separerade listan i en User Defined Function, som splittar upp, insertar i en temporär table-variabel, och returnerar denna som input till IN(). Det kan låta dyrt men det kostar ju mer att från klienten göra 1000 anrop till databasen...

Marcus förslag med XML är snyggare, så om du har tid tycker jag du ska kolla på det.


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 617
27 953
271 709
5 744
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