FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Har WN som tidsfördriv
|
Tjo!
Vi stötte på ett litet problem på jobbet när vi skulle skapa en ny SP i MSSQL 2008. Saken är att vi har en query i stil med: Kod:
SELECT stuff FROM table WHERE thing IN ('1','2','3') Kod:
CREATE PROCEDURE test @things VARCHAR(400) AS BEGIN SELECT stuff FROM table WHERE thing IN @things END Om det går; måste jag då skicka med ( och ) också? Tack på förhand ![]() Pelle |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Medlem
|
Nja, det går nog inte, men kör dynamisk sql annars..
CREATE PROC Foo @stringpassed AS BEGIN DECLARE @SQL varchar(100) SET @SQL = 'SELECT * FROM table WHERE idno IN ' + @stringpassed EXEC(@SQL) END |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Flitig postare
|
ändra till
WHERE thing = ANY(@things) och gör om @things till en array-variabel. |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
Har du möjlighet att lägga upp innehållet i @Things till en tabell i SQL så får du ett smidigt sätt att hantera det internt i SPn:
Kod:
CREATE PROCEDURE test AS BEGIN SELECT stuff FROM table WHERE thing IN (SELECT Thing FROM Things) END |
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Har WN som tidsfördriv
|
danjel: Funderade på det, men det är en rätt stor SP och kommer se grötigt ut
![]() Bjorne: Fränt! Hur konverterar man en sträng till en array i t-sql? Conny: Som det ser ut nu kommer det bli nått i stil med det du föreslog. Kommer dock skapa en virtuell tabell isf ![]() |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
kolla även denna, intressant..
http://www.4guysfromrolla.com/webtech/031004-1.shtml |
||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Mycket flitig postare
|
Följande sida listar ett par do's and don'ts. Den är absolut värd en plats bland ens bokmärken.
http://www.sommarskog.se/arrays-in-sql-2008.html |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Medlem
|
Denna funktion använder jag mig av ofta för att konvertera en kommaseparerad sträng till en table för att göra en insert med.
Kod:
create FUNCTION [dbo].[StringList_To_Table] (@list nvarchar(MAX)) RETURNS @tbl TABLE (String nvarchar(max) NOT NULL, [Id] [int] IDENTITY(1,1) NOT NULL) AS BEGIN DECLARE @pos int, @nextpos int, @valuelen int SELECT @pos = 0, @nextpos = 1 WHILE @nextpos > 0 BEGIN SELECT @nextpos = charindex(',', @list, @pos + 1) SELECT @valuelen = CASE WHEN @nextpos > 0 THEN @nextpos ELSE len(@list) + 1 END - @pos - 1 INSERT @tbl (String) VALUES (convert(nvarchar, substring(@list, @pos + 1, @valuelen))) SELECT @pos = @nextpos END RETURN END Kod:
insert into table MyTable select String,Id from StringList_To_Table('hej,hopp,test') |
|||
![]() |
![]() |
Svara |
|
|