Takodje nije pozeljno koristiti dinamicki kod za zadavanje parametara. Evo zasto:
Code:
DECLARE @USLOV nvarchar..
SET @Uslov = 'Id = 7; TRUNCATE TABLE Artikli ;'
DECLARE @SQL nvarchar(300)
SET @SQL = 'SELECT * FROM tbl WHERE ' + @USLOV
EXEC sp_executesql @SQL
Ovo se zove SQL injection. Varijabla @SQL ce da izgleda ovako:
Code:
SELECT * FROM tbl WHERE Id=1; TRUNCATE TABLE Artikli
i to ce sp_executesql lepo da izvrsi.
U SQL se paramatrizacija kverija resava upotrebom funkcija koje vracaju tabelu.
Code:
SELECT * FROM dbo.MyFunction(@Praam1, @param2, @Param3...)
U funkciji moze da bude i kursor, ako je bas neophodno.
Ako je situacija takva da se ne mogu definisati kolone za parametre unapred, onda je neki problem u pitanju. A ako koristis kursore, ima sanse da ima i vecih problema. Ne mora da znaci, kursori naravno nisu zabranjeni, ali mogu da ukazuju na nepotpuno razumevanje problma i kako SQL spada u celu sliku.
