Bilmek istediğin her şeye ulaş

Detaylarını vermiş olduğum sql sorgusunu en verimli şekilde nasıl çalıştırabilirim. Ya da sql prosedür içerisinde çalışan sql sorguma dizi olarak int değerlerini nasıl gönderebilirim?

@hesaptipi varchar(50) Hesaptipi kısmıda where hesaptipi IN (@hesaptipi) olarak yazdım. C# tan parametreyi gönderirken string olarak gönderiyorum. Sorun burada baş gösteriyor, benim göndermiş olduğum veriyi işlerken hesaptipi IN ('1,2') olarak aldığı için tipler arası uyuşmazlık oluşuyor. ben göndermiş olduğum değeri sql içerisinde nasıl bir işlemden geçirirsem hesaptipi IN (1,2) olarak aldırabilirim.Düzenle
Bunun çözümü SQL tarafında bir Split fonksiyonu oluşturmaktır:

CREATE FUNCTION [dbo].[Split]
 (
 @RowData NVARCHAR(MAX), 
 @SplitOn NVARCHAR(5) 
 ) 
RETURNS @ReturnValue TABLE ( Data NVARCHAR(MAX) ) 
AS 
 BEGIN
 DECLARE @Counter INT
 SET @Counter = 1 
 WHILE ( CHARINDEX(@SplitOn, @RowData) > 0 ) 
 BEGIN 
 INSERT INTO @ReturnValue
 ( data
 ) 
 SELECT Data = LTRIM(RTRIM(SUBSTRING(@RowData, 1, 
 CHARINDEX(@SplitOn, 
 @RowData) - 1)))
 SET @RowData = SUBSTRING(@RowData, 
 CHARINDEX(@SplitOn, @RowData) + 1, 
 LEN(@RowData)) 
 SET @Counter = @Counter + 1 
 END 
 INSERT INTO @ReturnValue
 ( data ) 
 SELECT Data = LTRIM(RTRIM(@RowData)) 
 RETURN 
 END; 
GO 

Bu fonksiyonu şu şkeilde kullanabilirsiniz:

DECLARE @str VARCHAR(MAX) 
SET @str = '1,2,3'
SELECT * From dbo.MyTable Where Id IN(
SELECT * FROM Split(@str, ',')
) 

Umarım faydalı olur.
  • Paylaş
5

Birkan Aydin, Faydalı olur ne demek, resmen hayatımı kurtardın :) iyi ki varsın :)

Hakan Köse, Rica ederim :)

Hakan Köse, Eğer LINQ, Entity Framework gibi yapılar kullanıyorsanız bu SQL sorgularına gerek yoktur? PHP tarafında bilemiyorum tabi.

Birkan Aydin, Asp.net 'te var olan bir proje üzerinden çalışmaya devam ediyorum, lakin linq veya ef kullanmayı tercih etmedim. zira kendileri ile ilgili herhangi bir çalışmam olmadı :)

Hakan Köse, Ok, başarılar dilerim.

Sonraki Soru
HESAP OLUŞTUR

İstatistikler

142 Görüntülenme2 Takipçi1 Yanıt