﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sql server ddl trigger kullanımı &#8211; SQL Server Eğitimleri</title>
	<atom:link href="https://sqlserveregitimleri.com/etiket/sql-server-ddl-trigger-kullanimi/feed" rel="self" type="application/rss+xml" />
	<link>https://sqlserveregitimleri.com</link>
	<description>SQL Server ile ilgili her şey</description>
	<lastBuildDate>Sun, 12 Sep 2021 13:36:08 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>SQL Server’da Prosedür, Trigger, Fonksiyon ve View Üzerindeki Değişiklikleri İzlemek</title>
		<link>https://sqlserveregitimleri.com/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek</link>
		
		<dc:creator><![CDATA[Yavuz Selim Kart]]></dc:creator>
		<pubDate>Sat, 09 May 2020 14:53:52 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Prosedür Trigger Fonksiyon ve View Üzerindeki Değişiklikleri İzlemek]]></category>
		<category><![CDATA[sql server ddl trigger kullanımı]]></category>
		<category><![CDATA[sql server ddl trigger nedir]]></category>
		<guid isPermaLink="false">https://sqlserveregitimleri.com/?p=9807</guid>

					<description><![CDATA[Herkese merhaba, Bu yazıda SQL Server&#8217;da Prosedür, Trigger, Fonksiyon ve View Üzerindeki değişiklikleri izlemek hakkında bilgi vereceğim. Konunun çıkış noktası SQL Server Eğitimleri Telegram Grubunda...]]></description>
										<content:encoded><![CDATA[<p>Herkese merhaba,</p>
<p>Bu yazıda SQL Server&#8217;da Prosedür, Trigger, Fonksiyon ve View Üzerindeki değişiklikleri izlemek hakkında bilgi vereceğim.</p>
<p>Konunun çıkış noktası <a href="https://t.me/sqlserveregitimleri"><strong>SQL Server Eğitimleri Telegram Grubunda</strong></a> soruyu bir arkadaşın sormasıdır.</p>
<p>Konu hakkında araştırma yaptım. Birkaç ufak örnek vardı. Bu örnekleri biraz daha kapsamlı halde kodlayıp paylaşmak istedim. Konu hakkında Türkçe bir yazı ya da makale mevcut değildir ya da varsa bana denk gelmedi. Alanında tektir. Daha da geliştirilebilir.</p>
<p>Bu işlemi hangi veritabanına uygulamak istiyorsanız o veritabanı üzerinde bu işlemleri yapın. Bu konu oldukça önemlidir.</p>
<p>Ben örnek olması açısından işlemlerimi <strong>Adventureworks</strong> adlı veritabanı üzerinden yaptım. İlk olarak aşağıdaki kodları ilgili veritabanınızda doğrudan çalıştırın.</p>
<p>Konu ile ilgili kodları aşağıda görmektesiniz.</p>
<pre class="line-numbers"><code class="language-sql">--DDL Tablosu Oluşturma

CREATE TABLE DDLIzleyici
(
    EventDate    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    EventType    NVARCHAR(64),
    EventDDL     NVARCHAR(MAX),
    EventXML     XML,
    DatabaseName NVARCHAR(255),
    SchemaName   NVARCHAR(255),
    ObjectName   NVARCHAR(255),
    HostName     VARCHAR(64),
    IPAddress    VARCHAR(48),
    ProgramName  NVARCHAR(255),
    LoginName    NVARCHAR(255)
);


--Daha önce oluşturulmuş Prosedürleri DDL Tablosuna Ekleme

INSERT dbo.DDLIzleyici
(
    EventType,
    EventDDL,
    DatabaseName,
    SchemaName,
    ObjectName
)
SELECT
    N'Initial control',
    OBJECT_DEFINITION([object_id]),
    DB_NAME(),
    OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id])
FROM
    sys.procedures;


--Daha önce oluşturulmuş Viewları DDL Tablosuna Ekleme

INSERT dbo.DDLIzleyici
(
    EventType,
    EventDDL,
    DatabaseName,
    SchemaName,
    ObjectName
)
SELECT
    N'Initial control',
    OBJECT_DEFINITION([object_id]),
    DB_NAME(),
    OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id])
FROM
    sys.views;


--Daha önce oluşturulmuş Fonksiyonları DDL Tablosuna Ekleme

INSERT dbo.DDLIzleyici
(
    EventType,
    EventDDL,
    DatabaseName,
    SchemaName,
    ObjectName
)
SELECT
    N'Initial control',
    OBJECT_DEFINITION([object_id]),
    DB_NAME(),
    OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id])
FROM
    sys.objects o WHERE o.type IN ('IF','TF','FN')


--Daha önce oluşturulmuş Triggerları DDL Tablosuna Ekleme


INSERT dbo.DDLIzleyici
(
    EventType,
    EventDDL,
    DatabaseName,
    SchemaName,
    ObjectName
)
SELECT
    N'Initial control',
    OBJECT_DEFINITION([object_id]),
    DB_NAME(),
    OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id])
FROM
    sys.triggers;


--DDL Triggeri Oluşturulması

CREATE TRIGGER DDLTriggerKontrol
ON DATABASE
FOR CREATE_PROCEDURE, DROP_PROCEDURE, ALTER_PROCEDURE, CREATE_TRIGGER, DROP_TRIGGER, ALTER_TRIGGER, CREATE_FUNCTION, DROP_FUNCTION, ALTER_FUNCTION, CREATE_VIEW, DROP_VIEW, ALTER_VIEW
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @EventData XML = EVENTDATA();

    DECLARE @ip VARCHAR(48) = CONVERT(VARCHAR(48), CONNECTIONPROPERTY('client_net_address'));

    INSERT DDLIzleyici
    (
        EventType,
        EventDDL,
        EventXML,
        DatabaseName,
        SchemaName,
        ObjectName,
        HostName,
        IPAddress,
        ProgramName,
        LoginName
    )
    SELECT @EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
           @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),
           @EventData,
           DB_NAME(),
           @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(255)'),
           @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)'),
           HOST_NAME(),
           @ip,
           PROGRAM_NAME(),
           SUSER_SNAME();
END;
GO</code></pre>
<p>Yukarıda yapılan işlemi kısaca açıklayalım. Daha önceden bu veritabanı üzerinde oluşturmuş olduğunuz prosedür, trigger, fonksiyon ve viewları yedeklemektedir. <strong>DDLIzleyici</strong> tablosuna create edilmiş hallerini atmaktadır.</p>
<p>Kodu çalıştırdıktan sonra <strong>DDLIzleyici </strong>tablosuna select ile baktığınızda aşağıdaki gibi bir sonuç göreceksiniz.</p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-9810 size-full" src="https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-1.jpg" alt="SQL Server’da Prosedür, Trigger, Fonksiyon ve View Üzerindeki Değişiklikleri İzlemek" width="700" height="275" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-1.jpg 700w, https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-1-315x124.jpg 315w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Görüldüğü üzere prosedür, trigger, fonksiyon ve viewlar yedeklendi.</p>
<p>Şidmi dilerseniz bir fonksiyon oluşturalım ve sonrasında tablomuza bakalım. Oluşturulan fonksiyon ile ilgili bilgi <strong>DDLIzleyici</strong> tablosunda olacak mı inceleyelim. Örnek kodu aşağıdan kopyalayıp ilgili veritabanınızda çalıştırın.</p>
<pre class="line-numbers"><code class="language-sql">CREATE FUNCTION denemeler
()
RETURNS VARCHAR(20)
AS
BEGIN
RETURN 'selamlar';
END;</code></pre>
<p>Kodu çalıştırdıktan sonra <strong>DDLIzleyici</strong> tablosunu select ile kontrol edin.</p>
<p><img decoding="async" class="alignnone wp-image-9811 size-full" src="https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-2.jpg" alt="SQL Server’da Prosedür, Trigger, Fonksiyon ve View Üzerindeki Değişiklikleri İzlemek" width="700" height="421" srcset="https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-2.jpg 700w, https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-2-315x189.jpg 315w, https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-2-499x300.jpg 499w, https://sqlserveregitimleri.com/wp-content/uploads/2020/05/sql-serverda-prosedur-trigger-fonksiyon-ve-view-uzerindeki-degisiklikleri-izlemek-2-224x135.jpg 224w" sizes="(max-width: 700px) 100vw, 700px" /></p>
<p>Görüldüğü üzere oluşturulmuş olan fonksiyon ile ilgili bilgi <strong>DDLIzleyici</strong> tablosunda tutulmuş oldu. Fonksiyonun içeriği, kimin oluşturduğu, hostname bilgisi, oluşturmada kullanılan program adı ve hangi yetkilinin bu fonkisyonu oluşturduğunu görmektesiniz. Değiştirme yani <b>ALTER </b>ile Silme yani <strong>DROP</strong> işlemlerinde de benzer şekilde sonuçları tabloya basacaktır.</p>
<p>Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.</p>
<div class='epvc-post-count'><span class='epvc-eye'></span>  <span class="epvc-count"> 513</span><span class='epvc-label'> Kez Okundu</span></div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
