Vinnaren i pepparkakshustävlingen!
2008-04-04, 09:02
  #1
Medlem
snurreskvätts avatar
Hej. Nu skulle man behöva lite hjälp, dbkillen är på semester och självklart landar nåt jobbigt i knät på en.

Håller på med en SP som tar två parametrar, en bara ett id den andra en array med id'n.
Det som jag vill göra är alltså att loopa igenom denna array och göra en insert för varje loop. Det jobbiga är att loopen måste göras i SP'n och inte i .netkoden.

har inte kommit så långt för mina sqlkunskaper tar slut vid join, men såhär nånting borde det väl bli.

Kod:
ALTER PROCEDURE [dbo].[w3_RelateUnitToUnitCategory]
@
UnitID int,
@
MetaDataList nvarchar(2000) -- Arrayen 

AS

While (
Charindex(char(30),@MetaDataList)>0)
 
Begin 
    
    Insert Into tbl 
(UntitIdArrIdvalues(@UnitID,@värdet_från_arrayen
    
Set @MetaDataList = --ta bort id' vi just plockade ut antar jag
 End 
Det som jag behöver hälp med är alltså hur man får till inserten inne i loopen. Hur man plockar ut rätt värde ur arrayen med SQL? Borde väl bli ngt med substring antar jag men får inte till det. Att det är sjukt svårt att debugga i SQL gör ju inte saken bättre.

Någon som har en idé? Tacksam för all hjälp.
Citera
2008-04-04, 09:32
  #2
Medlem
googlevistas avatar
Det är inte en array, eftersom det inte finns arrays i T-SQL, utan en sträng som är separerad med char(30).

Skrev detta lite snabbt:
Kod:
declare @MetaDataList nvarchar(2000) 
declare @PartID int

-- Tilldela lite värden
set @MetaDataList = '100' + char(30) + '200' + char(30) + '300' + char(30) + '400' 

-- Se till att det alltid finns ett char(30) i slutet på strängen
if substring(@MetaDataList, len(@MetaDataList) - 1, 1) <> char(30)
	set @MetaDataList = @MetaDataList + char(30)

while charindex(char(30), @MetaDataList) > 0 
begin
	-- Plocka ut ID:t
	set @PartID = convert(int, substring(@MetaDataList, 0, charindex(char(30), @MetaDataList)))
	-- Skriv ut ID:t
	print 'ID: ' + CONVERT(varchar(10), @PartID)
	-- Ta bort ID:t
	set @MetaDataList = substring(@MetaDataList, charindex(char(30), @MetaDataList)+1, 2000)
end

Du bör väl kunna plocka ut relevant kod ur detta. Byt ut print-satsen till din Insert. Hojta om du behöver mer hjälp.
Citera
2008-04-04, 09:45
  #3
Medlem
snurreskvätts avatar
Citat:
Ursprungligen postat av googlevista


Du bör väl kunna plocka ut relevant kod ur detta. Byt ut print-satsen till din Insert. Hojta om du behöver mer hjälp.

yehoo, Perfekt! Nu lirar det! hade räknat med att sitta hela förmiddagen med detta. Tusen tack
Citera
2008-04-04, 13:46
  #4
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av snurreskvätt
yehoo, Perfekt! Nu lirar det! hade räknat med att sitta hela förmiddagen med detta. Tusen tack
Om du kör SQL 2005 kan du även leka med XML:
Kod:
DECLARE @UnitID int
DECLARE @MetaDataList xml

SET @UnitID = 5
SET @MetaDataList = '<List>
    <ArrID ID="13" />
    <ArrID ID="14" />
</List>'

DECLARE @tbl TABLE (UnitID int, ArrID int)

INSERT INTO @tbl (UnitID, ArrID)
    SELECT @UnitID, xmllist.value('@ID','int')
    FROM @MetaDataList.nodes('//ArrID') AS R(xmllist)

SELECT * FROM @tbl
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback