Trigger'da değişken üzerinden sorgulama

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Trigger'da değişken üzerinden sorgulama

Mesaj gönderen sabanakman »

Mesela

set @tbl='genel'

şeklinde bir değişken değeri ayarladıktan sonra ben bu @tbl içindeki değere göre aşağıdaki gibi sorgulama yapamadım. Bunun bir yolu var mıdır? Varsa Nedir? :)

select * from @tbl

asıl yapmak istediğim ise

set @tbl='genel..tanimlar'
update @tbl set A=Null

gibi bir işlem.

Not:Bu şekilde çalışmadı...
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

Kod: Tümünü seç

DECLARE @SQL Varchar(200)  
declare @tbl Varchar(100)  
set @tbl= 'INFO_UYELER'  
SET @SQL = 'SELECT * FROM ' + @tbl  
exec(@SQL) 
kolay gelsin
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

peki

Mesaj gönderen sabanakman »

Çok güzel çalıştı. Peki ben bunu

if Exists(exec(@SQL))
begin
.
.
end

gibi bir mantıkla kullanmam gerekiyor. Bu yapılabiliyor mu?

Not: Bu şekilde yine çalışmadı :)
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

başka :)

Kod: Tümünü seç

DECLARE @SQL Varchar(200)  
declare @tbl Varchar(100)  
set @tbl= 'L_CAPIFIRM'  
SET @SQL = 'SELECT * FROM ' + @tbl  

IF EXISTS(SELECT * FROM sysobjects WHERE id = OBJECT_ID(@TBL))
 BEGIN  
 PRINT 'TABLO VAR'
 END
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Problemde Asıl İstenen

Mesaj gönderen sabanakman »

Bu şekilde tablonun olup olmadğını kontrol etmek değilde. String içinde oluşturduğum SQL cümlesinden çıkan sonuç üzerinden çalışmak istiyorum. Yani tam olarak

Kod: Tümünü seç

DECLARE @SQL Varchar(200)  
declare @tbl Varchar(100)
declare @stkid Varchar(30)
declare @mik Varchar(30)
select @stkid=Kartid,@mik=Miktar from inserted
begin
  set @tbl=DB_NAME() --Çalıştığım katalog (veri tabanı)
  set @tbl=Left(@tbl,Len(@tbl)-4)+'GENEL..Kart' /*başka katalog içindeki tablo.*/
  SET @SQL = 'SELECT * FROM ' + @tbl  +' where id='+@stkid 
Artık @SQL string bilgisi içinde bulunan SQL cümlenin çalışması sonucu kayıt olup olmadığının kontrolünü yapmam lazım. Ondan sonrası kolay.

Kod: Tümünü seç

  if (??????????????????????)--Kontrol sonrası kayıt varsa
  begin
    SET @SQL = 'update '+@tbl+' set Toplam=isNull(Toplam,0+'+@mik+' where id='+@stkid  
    EXEC(@SQL)
  end else RAISERROR('[%s] nolu kart bulunamadı!',16,1,@stkid)
end
işte bütün mesele burada. Başka Veritabanı içinde bulunan tabloyu kontrol edip güncellemem lazım. Güncelleme kısmı oldu fakat kontrol edemiyorum. Başka veri tabanı kullanmak için USE komutunu kullanmayı denedim o da olmadı.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

EXEC komutu içinde çalıştırdığınız SQL'den geçici tablo oluşturup (tabi örneğin tek kayıtlık) bilahare o tablo için EXISTS vs kullanın.

Örneğin:

Kod: Tümünü seç

EXEC('SELECT TOP 1 * INTO #TEMPTABLO FROM DB.dbo.URUN ...')
IF EXISTS(SELECT * FROM #TEMPTABLO...) ....
gibi.

İyi çalışmalar.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Çözüm

Mesaj gönderen sabanakman »

Hmmm!.. Çok zekice bir çözüm :) . Yardımlarınızdan dolayı çok sağolun.
Cevapla