Hej. REATE FUNCTION intlist_to_tbl (@list varchar(8000)) Till exempel kan du i den lagrade proceduren bygga ihop den sql-sats som ska exekveras: Är exemplet verkligen helt korrekt? Borde du inte tilldela @sql din select-sats, dvs Båda förslagen som du fått och flera andra diskuteras i detalj på följande hemsida : En nackdel med att använda dynamisk sql är att detta kräver att användaren har behörighet till de tabeller som ingår. Detta krävs inte annars om man använder sp:s. Då räcker det med exekveringsrättighet på sp:n.Stored procedure
Jag har problem när jag ska göra ett where urval med in i en stored procedure. Se exempel.
Vi säger att id är '123123123','516515156151','1515665156'
@id varchar(4000)
select *from myTable where id in
(
@id
)
Något som vet hur man löser detta problem?Sv: Stored procedure
RETURNS @tbl TABLE (listid int IDENTITY(1,1),val int) AS
BEGIN
DECLARE @ix int,
@pos int,
@str varchar(8000),
@num int
SET @pos = 1
SET @ix = 1
WHILE @ix > 0
BEGIN
SET @ix = charindex(',', @list, @pos)
IF @ix > 0
SET @str = substring(@list, @pos, @ix - @pos)
ELSE
SET @str = substring(@list, @pos, len(@list))
SET @str = ltrim(rtrim(@str))
IF @str LIKE '%[0-9]%' AND
(@str NOT LIKE '%[^0-9]%' OR
@str LIKE '[-+]%' AND
substring(@str, 2, len(@str)) NOT LIKE '[-+]%[^0-9]%')
BEGIN
SET @num = convert(int, @str)
INSERT @tbl (val) VALUES(@num)
END
SET @pos = @ix + 1
END
RETURN
ENDSv: Stored procedure
create procedure minprocedur
@id nvarchar(4000)
as
declare @sql nvarchar(4000)
set N'select * from myTable where id in (' + @id ')'
exec sp_executesql @sql
Detta kommer att fungera. Var bara noggrann med att få med apostroferna i anropet av proceduren. Om man gör det i SQL Query Analyzer ser det ut såhär:
exec minprocedur '''123123123'', ''516515156151'', ''1515665156'''
Detta bygger på att man utnyttjar den lagrade proceduren sp_executesql och skickar en textsträng till den.
//Niclas BlomquistSv:Stored procedure
set @sql = N'select * from myTable where id in (' + @id ')'.
Utöver det, ett väldigt användbart exempel. Jag har letat efter ett sätt att kunna skicka med en IN-sträng
/LisbetSv: Stored procedure
http://www.sommarskog.se/dynamic_sql.htmlSv:Stored procedure
/Pelle