Konuyu görüntüle
IUCODERS FORUM > Programlama > Veritabanları > stored prosedür yardım
Yazar
enginkdal


avatar

Kayıt: 09.01.2008
29.01.2009-21:42 #56258
ALTER PROCEDURE dbo.humam
(
@topX INT,
@katagori varchar(50)
)
AS
DECLARE @SQL VarChar(1000)


SELECT @SQL = 'SELECT TOP '

SELECT @SQL = @SQL + CAST(@topX as nvarchar(10)) +' * from uye WHERE rol=@katagori'

EXEC ( @SQL)



kırmızı ile işaretlediğim yeri nasıl alırım. rol=admin olanları alamıyorum mesela yani değişken nasıl alırım burdan.





B?ZLER PAZARLiK DEGiL MEZARLIK DOSTLARIYIZ.






Yazar
offman


avatar
Kayseri
Kayıt: 20.01.2006
29.01.2009-22:54 #56261
Create PROCEDURE dbo.humam
(
@topX INT,
@katagori varchar(50)
)
AS
EXEC('SELECT TOP ' + Cast(@topX as nvarchar(10)) + ' * from uye where rol='+@kategori)
-------------------------------------------------------------------------------------------------------
Create PROCEDURE dynamicSql dbo.humam
(
@topX nvarchar(5),
@whereStatement nvarchar(1000)
)
AS
EXEC('SELECT TOP ' + @topX + ' * from uye where '+@whereStatement)

ikinci yazdığımda ise topX i string olarak gonderebilirsin farkeden bir sey olamas dinamik olarak oluşturulan sorgu içinde sorun çıkmayacaktır. Ve kod tarafında @whereStatement ina istediğini atabilirsin örneğin rol=3 rol =5 deyip gonder gitsin.






331. KSD
*.NET DEVELOPER




Yazar
enginkdal


avatar

Kayıt: 09.01.2008
29.01.2009-23:13 #56262
offman yazdi
 
Create PROCEDURE dbo.humam
(
@topX INT,
@katagori varchar(50)
)
AS
EXEC('SELECT TOP ' + Cast(@topX as nvarchar(10)) + ' * from uye where rol='+@kategori)
-------------------------------------------------------------------------------------------------------
Create PROCEDURE dynamicSql dbo.humam
(
@topX nvarchar(5),
@whereStatement nvarchar(1000)
)
AS
EXEC('SELECT TOP ' + @topX + ' * from uye where '+@whereStatement)

ikinci yazdığımda ise topX i string olarak gonderebilirsin farkeden bir sey olamas dinamik olarak oluşturulan sorgu içinde sorun çıkmayacaktır. Ve kod tarafında @whereStatement ina istediğini atabilirsin örneğin rol=3 rol =5 deyip gonder gitsin.


senin dediğini de denedim ama yine görmedi daha once denemiştim 1. olanını ama olmamıştı.





B?ZLER PAZARLiK DEGiL MEZARLIK DOSTLARIYIZ.






Yazar
enginkdal


avatar

Kayıt: 09.01.2008
29.01.2009-23:23 #56263
olmadı hacım





B?ZLER PAZARLiK DEGiL MEZARLIK DOSTLARIYIZ.






Yazar
piedro


avatar

Kayıt: 08.06.2008
30.01.2009-01:14 #56273
type hatası var gibi,,,

rol = 5 mi
yoksa
rol = '5' mi

tırnakları unutuyorsun gibi bir durum var





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
30.01.2009-11:13 #56280
--exec humam 12, 'DİYARBAKIR'
ALTER PROCEDURE dbo.humam
(
@topX INT = 10,
@katagori varchar(50) = 'ADANA' 
)
AS
DECLARE @SQL VarChar(MAX) /*Şartların çoğaldığı where koşulunun uzadığı durumlarda max kulanman daha iyi.*/
/*Aşağıdaki satırda düzenleme yapıyorum, fazlalıklar var.*/
--SELECT @SQL = 'SELECT TOP ' + rtrim(ltrim(CAST(@topX as nvarchar(10)))) +' * from Adres 

SELECT @SQL = 'SELECT TOP ' + CAST(@topX as varchar) +' * from Adres 

WHERE SEHIR=''' + @katagori + '''' /*ltrim, rtrim arada fazla boşluklar oluşmasın diye */
--select @SQL as StOlusanSorgu /*Bu satırı oluşan cümleyi gör diye yazdım.*/
EXEC (@SQL) 

Not: Elimde küçük Adres tablosu vardı. Sen kendine göre uyarlarsın artık. Default değerleri de ben denerken kendim verdim. Problem tırnaklardaymış. Dinamik sqli tırnaklar yüzünden sevmiyorum pek. :)





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb