Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Database ve tablo isimlerini parametre olarak kullanma
#1
Merhaba,

Database ve tablo isimlerini parametre olarak atama imkanı var mıdır ?
Yardımınız ve desteğiniz için şimdiden teşekkürler.

iyi çalışmalar,

DECLARE @Firma int=1
DECLARE @Hesapp int=1


declare @Yevmiye1 VARCHAR(250)='[DENEME_FİRMASI_2_2016].[dbo].[yevmiye] Y'
declare @Yevmiye2 VARCHAR(250)='[DENEME_FİRMASI_2_2017].[dbo].[yevmiye] Y'
declare @Yevmiye3 VARCHAR(250)='[DENEME_FİRMASI_2_2018].[dbo].[yevmiye] Y'
declare @Yevmiye4 VARCHAR(250)='[DENEME_FİRMASI_2_2019].[dbo].[yevmiye] Y'


declare @Hesapplani1 VARCHAR(250)='[DENEME_FİRMASI_2016].[dbo].[hesplan] h'
declare @Hesapplani2 VARCHAR(250)='[DENEME_FİRMASI_2017].[dbo].[hesplan] h'
declare @Hesapplani3 VARCHAR(250)='[DENEME_FİRMASI_2018].[dbo].[hesplan] h'
declare @Hesapplani4 VARCHAR(250)='[DENEME_FİRMASI_2019].[dbo].[hesplan] h'


declare @Yevmiye VARCHAR(250) =
CASE WHEN @Firma = 1 THEN  @Yevmiye1
WHEN @Firma = 2 THEN @Yevmiye2
WHEN @Firma = 3 THEN @Yevmiye3
WHEN @Firma = 4 THEN @Yevmiye4
ELSE @Yevmiye1
END;    


declare @Hesapplani VARCHAR(250) =
CASE WHEN @Hesapp = 1 THEN @Hesapplani1
WHEN @Hesapp = 2 THEN @Hesapplani2
WHEN @Hesapp = 3 THEN @Hesapplani3
WHEN @Hesapp = 4 THEN @Hesapplani4
ELSE @Hesapplani1
END;



SELECT @Firma AS Firma, y.Refno,y.Refno2,y.Gmkod,h.Aciklama,h.Vergidairesi as VERGI_DAIRESI,
h.Vergikimlikno as VERGI_NO,
y.Fistar,y.Evraktarihi,y.Evrakno,
MONTH(y.Fistar) as Ay,year(y.Fistar) as Yil,
y.Fistur,y.Fisno,y.Aciklama,
(COALESCE(y.Doviz, 0)) as Doviz,
(COALESCE(y.Dovizadi,0)) AS Dovizadi,

CASE WHEN (COALESCE(y.Borclu,0)) > 0.00 then
(COALESCE(y.Doviz, 0)) ELSE
0.00 END AS Doviz_Borc,

CASE WHEN (COALESCE(y.Alacakli,0)) > 0.00 then
(COALESCE(y.Doviz, 0)) ELSE
0.00 END AS Doviz_Alacak,
CASE
WHEN y.Dovizadi = NULL THEN 'TRY'
WHEN y.Dovizadi = 1 THEN 'TRY'
WHEN y.Dovizadi = 2 THEN 'USD'
WHEN y.Dovizadi = 3 THEN 'EURO'
ELSE 'TRY' END AS Doviz_Adi,
(COALESCE(y.Borclu,0)) as Borclu,
(COALESCE(y.Alacakli,0)) as Alacakli
,y.Islemtipi,y.Belge_Turu,
--y.Belge_Turu_Aciklamasi,
CASE
WHEN y.Belge_Turu = 1 THEN 'Fatura'
WHEN y.Belge_Turu = 2 THEN 'Çek'
WHEN y.Belge_Turu = 3 THEN 'Makbuz'
WHEN y.Belge_Turu = 4 THEN 'Müşteri Sipariş Belgesi'
WHEN y.Belge_Turu = 5 THEN 'Satıcı Sipariş Belgesi'
WHEN y.Belge_Turu = 6 THEN 'Senet'
WHEN y.Belge_Turu = 7 THEN 'Navlun'
WHEN y.Belge_Turu = 8 THEN y.Belge_Turu_Aciklamasi
WHEN y.Belge_Turu = 9 THEN 'Belge Yok'
ELSE '' END AS Belge_Turu_Aciklamasi,

CASE WHEN y.Vade_Tarihi is null then y.Evraktarihi
else y.Vade_Tarihi end as Vade_Tarihi


,(convert(varchar,@Firma)) +'-'+(convert(varchar,y.Fisno) +'-'+convert(varchar,MONTH(y.Fistar)) +'-'+ convert(varchar,(DATEPART(yy,(DATEADD(YEAR,0,y.Fistar)))))
+'-'+convert(varchar,y.Fistur) +'-'+ convert(varchar,y.Refno)+'-'+ convert(varchar,y.Refno2)) AS REF
, GETDATE() as Mtarih, '' AS Kod, '' AS Kod2,'' AS Kod3, '' AS Kod4,'' AS Kod5  

FROM @Yevmiye
LEFT JOIN @Hesapplani h on h.Kod=y.Gmkod  COLLATE Turkish_CS_AS


order by y.Fistar, y.Fistur, y.Fisno, y.Refno
Cevapla
#2
CREATE PROCEDURE [GetYevmiye] (@Firma int,@Hesapp int)
AS
BEGIN

declare @Yevmiye1 VARCHAR(250)='[DENEME_FİRMASI_2_2016].[dbo].[yevmiye] Y'
declare @Yevmiye2 VARCHAR(250)='[DENEME_FİRMASI_2_2017].[dbo].[yevmiye] Y'
declare @Yevmiye3 VARCHAR(250)='[DENEME_FİRMASI_2_2018].[dbo].[yevmiye] Y'
declare @Yevmiye4 VARCHAR(250)='[DENEME_FİRMASI_2_2019].[dbo].[yevmiye] Y'


declare @Hesapplani1 VARCHAR(250)='[DENEME_FİRMASI_2016].[dbo].[hesplan] h'
declare @Hesapplani2 VARCHAR(250)='[DENEME_FİRMASI_2017].[dbo].[hesplan] h'
declare @Hesapplani3 VARCHAR(250)='[DENEME_FİRMASI_2018].[dbo].[hesplan] h'
declare @Hesapplani4 VARCHAR(250)='[DENEME_FİRMASI_2019].[dbo].[hesplan] h'


declare @Yevmiye VARCHAR(250) =
CASE WHEN @Firma = 1 THEN  @Yevmiye1
WHEN @Firma = 2 THEN @Yevmiye2
WHEN @Firma = 3 THEN @Yevmiye3
WHEN @Firma = 4 THEN @Yevmiye4
ELSE @Yevmiye1
END;    


declare @Hesapplani VARCHAR(250) =
CASE WHEN @Hesapp = 1 THEN @Hesapplani1
WHEN @Hesapp = 2 THEN @Hesapplani2
WHEN @Hesapp = 3 THEN @Hesapplani3
WHEN @Hesapp = 4 THEN @Hesapplani4
ELSE @Hesapplani1
END;


EXEC ('
SELECT @Firma AS Firma, y.Refno,y.Refno2,y.Gmkod,h.Aciklama,h.Vergidairesi as VERGI_DAIRESI,
h.Vergikimlikno as VERGI_NO,
y.Fistar,y.Evraktarihi,y.Evrakno,
MONTH(y.Fistar) as Ay,year(y.Fistar) as Yil,
y.Fistur,y.Fisno,y.Aciklama,
(COALESCE(y.Doviz, 0)) as Doviz,
(COALESCE(y.Dovizadi,0)) AS Dovizadi,

CASE WHEN (COALESCE(y.Borclu,0)) > 0.00 then
(COALESCE(y.Doviz, 0)) ELSE
0.00 END AS Doviz_Borc,

CASE WHEN (COALESCE(y.Alacakli,0)) > 0.00 then
(COALESCE(y.Doviz, 0)) ELSE
0.00 END AS Doviz_Alacak,
CASE
WHEN y.Dovizadi = NULL THEN ''TRY''
WHEN y.Dovizadi = 1 THEN ''TRY''
WHEN y.Dovizadi = 2 THEN ''USD''
WHEN y.Dovizadi = 3 THEN ''EURO''
ELSE ''TRY'' END AS Doviz_Adi,
(COALESCE(y.Borclu,0)) as Borclu,
(COALESCE(y.Alacakli,0)) as Alacakli
,y.Islemtipi,y.Belge_Turu,
--y.Belge_Turu_Aciklamasi,
CASE
WHEN y.Belge_Turu = 1 THEN ''Fatura''
WHEN y.Belge_Turu = 2 THEN ''Çek''
WHEN y.Belge_Turu = 3 THEN ''Makbuz''
WHEN y.Belge_Turu = 4 THEN ''Müşteri Sipariş Belgesi''
WHEN y.Belge_Turu = 5 THEN ''Satıcı Sipariş Belgesi''
WHEN y.Belge_Turu = 6 THEN ''Senet''
WHEN y.Belge_Turu = 7 THEN ''Navlun''
WHEN y.Belge_Turu = 8 THEN y.Belge_Turu_Aciklamasi
WHEN y.Belge_Turu = 9 THEN ''Belge Yok''
ELSE '' END AS Belge_Turu_Aciklamasi,

CASE WHEN y.Vade_Tarihi is null then y.Evraktarihi
else y.Vade_Tarihi end as Vade_Tarihi


,(convert(varchar,@Firma)) +'-'+(convert(varchar,y.Fisno) +'-'+convert(varchar,MONTH(y.Fistar)) +'-'+ convert(varchar,(DATEPART(yy,(DATEADD(YEAR,0,y.Fistar)))))
+'-'+convert(varchar,y.Fistur) +'-'+ convert(varchar,y.Refno)+'-'+ convert(varchar,y.Refno2)) AS REF
, GETDATE() as Mtarih, '' AS Kod, '' AS Kod2,'' AS Kod3, '' AS Kod4,'' AS Kod5  

FROM '+@Yevmiye+'
LEFT JOIN '+@Hesapplani+' h on h.Kod=y.Gmkod  COLLATE Turkish_CS_AS


order by y.Fistar, y.Fistur, y.Fisno, y.Refno'

END


--KULLANIM
--EXEC GetYevmiye @Firma = 1,@Hesapp =1

Database olmadığı için deneme şansım yoktu.
Cevapla
#3
Merhaba,

Sayın elixir84 ilginize öncelikle teşekkür ederim, yalnız benden de kaynaklanan bir hatadan dolayı olabilir database cinsini yazmamışım mssql olacak, bu yüzden tırnaklar ile ilgili ufak efekt düzeltmeler yapmak zorunda kaldım ama sonuç olarak yine hata veremeye devam ediyor.

   
Msg 1087, Level 16, State 1, Procedure GetYevmiye, Line 81
Must declare the table variable "@Yevmiye".
Msg 1087, Level 16, State 1, Procedure GetYevmiye, Line 82
Must declare the table variable "@Hesapplani".
Cevapla
#4
(26-12-2019, Saat: 16:49)denizfatihi Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba,

Sayın elixir84 ilginize öncelikle teşekkür ederim, yalnız benden de kaynaklanan bir hatadan dolayı olabilir database cinsini yazmamışım mssql olacak, bu yüzden tırnaklar ile ilgili ufak efekt düzeltmeler yapmak zorunda kaldım ama sonuç olarak yine hata veremeye devam ediyor.

   
Msg 1087, Level 16, State 1, Procedure GetYevmiye, Line 81
Must declare the table variable "@Yevmiye".
Msg 1087, Level 16, State 1, Procedure GetYevmiye, Line 82
Must declare the table variable "@Hesapplani".

Gönderdiğim gibi deneyip 

order by y.Fistar, y.Fistur, y.Fisno, y.Refno'
sonuna parantez koymamışım sanırım. Parantez koyup denermisiniz 

order by y.Fistar, y.Fistur, y.Fisno, y.Refno')
Cevapla
#5
Aslında hedeflediğiniz işlem için farklı bir yapı tavsiye edeceğim. Örnek basit bir select-from üzerinden tarif edildi ama sadece select üzerinden ayar çekerek istediğiniz işlemi yapabilirsiniz. Ana mantık bir tablo üreten sorguyu (burada sp_executesql Stored Procedure üzerinden kullandık) alan isimleri uyuşacak şekilde insert sorgusunda kullanabilmemizdir.
declare @TabloAdi nvarchar(50), @RaporSQL nvarchar(max) = N'select alan1, alan2, alan3 from ', @SQL nvarchar(max)
declare @Rapor table (id int identity, alanA nvarchar(50), alanB nvarchar(50), alanC nvarchar(50))

set @TabloAdi = N'dbX.dbo.Tablo'
set @SQL =  @RaporSQL + @TabloAdi
insert into @Rapor (alaA, alanB, alanC)
execute sp_executesql @SQL


set @TabloAdi = N'dbY.dbo.Tablo'
set @SQL =  @RaporSQL + @TabloAdi
insert into @Rapor (alaA, alanB, alanC)
execute sp_executesql @SQL

set @TabloAdi = N'dbZ.dbo.Tablo'
set @SQL =  @RaporSQL + @TabloAdi
insert into @Rapor (alaA, alanB, alanC)
execute sp_executesql @SQL

select * from @Rapor
Görüldüğü üzere @SQL değişkeninde (bir tablo içindeki) listelenecek sorguyu oluşturduktan sonra declare table ile tanımlı @Rapor tablo değişkenine direkt insert into ile ekledik. Aynı şekilde başka tabloları da art arda insert into ile eklememiz durumunda @Rapor tablosunda bütün eklenen kayıtlar birikecek ve istenilen kayıtların hepsi bir arada bu tabloda bulunacaktır.
Cevapla
#6
Dinamik sql kullanmam gerektiğinde aşağıdaki yapıdaki gibi kullanıyorum. 

declare @db1 nvarchar(15) = N'veritabaniA'
declare @db2 nvarchar(15) =  N'veritabaniB'
declare @sqltext nvarchar(max)

set @sqltext=N'select b.* from '+@db1+'.dbo.USER a
inner join '+@db2+'.dbo.SKART b on a.USERNAME=b.CREATEDUSER
where a.USERNAME=@param'

EXEC sp_executesql @sqltext,N'@param varchar(15)',@param=N'ADMIN'

örnekte veritabanı isimleri değişkende ayrıca kullanıcı adı parametre olarak yollanıyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  String tarih ve saat alanını birleştirme kullanma cinarbil 9 1.959 22-08-2019, Saat: 00:25
Son Yorum: serdar
  SQL SERVER'dan Delphi'ye parametre değerini göndermek harezmi 1 423 25-05-2019, Saat: 15:23
Son Yorum: adelphiforumz
  Tablo İsimlendirme mustafasivlin 11 1.704 08-04-2019, Saat: 09:29
Son Yorum: edo
  Sql Insert Into parametre kullanımı hk. cinarbil 7 1.105 01-03-2019, Saat: 17:47
Son Yorum: cinarbil
  read committed snapshot Tablo kilitleme Sorunu Emrah Karagöz 3 896 12-10-2018, Saat: 17:34
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi