SQL Server Tüm İndexler Rebuild

Veritabanında bulunan indexleri aşağıdaki script ile kolayca rebuild yapabilirsiniz

USE [VeritabanıAdı];
GO

DECLARE @TableName NVARCHAR(255);
DECLARE table_cursor CURSOR FOR 
SELECT name FROM sys.tables;

OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @TableName;

WHILE @@FETCH_STATUS = 0  
BEGIN  
       EXEC ('ALTER INDEX ALL ON ' + @TableName + ' REBUILD;');
       FETCH NEXT FROM table_cursor INTO @TableName; 
END;

CLOSE table_cursor;  
DEALLOCATE table_cursor; 
GO

Database deki Tüm Tablolara Otomatik Insert Oluşturma

Sql Server da bulunan database deki tüm tablolara otomatik insert komutu oluşturan script

bu script le database deki veri leri kopyalamak için kullanabilir

sorguyu geliştirerek devir gibi işlemlerde kullanabilirsiniz

Bu sorguda autoincrement tipindeki alanlara insert yapılamayacağım autoincrement alanlar tespit edilip kolon bilgilier için getirilmemiştir


-- Geçici bir tablo oluştur
CREATE TABLE #InsertCommands (
    TableName NVARCHAR(128),
    InsertCommand NVARCHAR(MAX)
)

DECLARE @KaynakDatabase NVARCHAR(128)
DECLARE @HedefDatabase NVARCHAR(128)
DECLARE @TableName NVARCHAR(128)
DECLARE @SQL NVARCHAR(MAX)

SET @KaynakDatabase = '[Verilerin Alınacağı Database]'
SET @HedefDatabase = '[Verilerin Kopyalacanağı Database]'

DECLARE tableCursor CURSOR FOR
SELECT t.name
FROM sys.tables t
WHERE t.type = 'U'

OPEN tableCursor

FETCH NEXT FROM tableCursor INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = 'INSERT INTO #InsertCommands (TableName, InsertCommand) SELECT ''' + @TableName + ''', 
                ''INSERT INTO ' + @HedefDatabase + '.[dbo].[' + @TableName + '] (' +
                STUFF((
                    SELECT ', [' + c.name + ']'
                    FROM sys.columns c
                    WHERE c.object_id = OBJECT_ID(@TableName) AND c.is_identity = 0
                    FOR XML PATH('')), 1, 2, '') + ') SELECT ' +
                STUFF((
                    SELECT ', [' + c.name + ']'
                    FROM sys.columns c
                    WHERE c.object_id = OBJECT_ID(@TableName) AND c.is_identity = 0
                    FOR XML PATH('')), 1, 2, '') + '   FROM ' + @KaynakDatabase + '.[dbo].' + '['+@TableName+']' + ''''

    EXEC sp_executesql @SQL

    FETCH NEXT FROM tableCursor INTO @TableName
END

CLOSE tableCursor
DEALLOCATE tableCursor

-- Geçici tablodaki sonuçları al
SELECT DISTINCT * FROM #InsertCommands  -- DISTINCT ile benzersiz sonuçlar alın

-- Geçici tabloyu temizle
DROP TABLE #InsertCommands

MSSQL Rebuild Index , Sql Server Index Yenileme

MsSql deki index lerimizi zaman zaman rebuild yapıp indexleri yenilememiz gerekir bunuda aşağıdaki script ile gerçekleştirebilir siniz

USE [Database]
GO
ALTER INDEX [Index_Adı] ON [dbo].[Tablo Adı]
REBUILD PARTITION = ALL WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 10)
GO
Missing Index SQL

Otomatik Index Üreten SQL Scripti

Çalışan database de script çalıştırılınca işe yarar boş database de yada aktif olarak çalışmayan database de boş döner

SELECT    
dm_mid.database_id AS DatabaseID,
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
dm_migs.last_user_seek AS Last_User_Seek,
OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName],
'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_'
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') 
+ CASE
WHEN dm_mid.equality_columns IS NOT NULL
AND dm_mid.inequality_columns IS NOT NULL THEN '_'
ELSE ''
END
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
+ ']'
+ ' ON ' + dm_mid.statement
+ ' (' + ISNULL (dm_mid.equality_columns,'')
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns 
IS NOT NULL THEN ',' ELSE
'' END
+ ISNULL (dm_mid.inequality_columns, '')
+ ')'
+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement
FROM sys.dm_db_missing_index_groups dm_mig
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
ON dm_migs.group_handle = dm_mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details dm_mid
ON dm_mig.index_handle = dm_mid.index_handle
WHERE dm_mid.database_ID = DB_ID()
ORDER BY Avg_Estimated_Impact DESC
GO
SQL Server Link Server Oluşturma
exec sp_addlinkedserver @server='LinkServerADI', @srvproduct='', @provider='SQLOLEDB', @datasrc='SERVERADI'
exec sp_addlinkedsrvlogin 'LinkServerADI', 'False', Null, 'SQLKullanıcı', 'SQLŞifre'


Script Çalıştırıldıktan sonra

Link server oluşturduğumuz serverdaki tabloları aşağı komut ile görüntüleyebiliriz

select * from LinkServerADI.Database.dbo.Tablo
SQL Server Log Dosyası Küçültme

Sql Server daki ldf dosyalarının boyutlarını aşağıdaki script ile küçültebiliriz

USE   DatabaseName
ALTER DATABASE  DatabaseName
SET RECOVERY SIMPLE
GO


USE   DatabaseName
DBCC SHRINKFILE (DatabaseName_Log, 500)  --- Buradaki 500 yazısı log dosyasının küçültüleceği boyutudur bu örnek de  500 mb olarak küçültülür
GO

USE   DatabaseName
ALTER DATABASE  DatabaseName
SET RECOVERY FULL
GO
SQL Server Kontröllü Procedure Oluşturma

SQL server procedure oluşturma işlemini kontrol ederek gerçekleştirir var sa procedure update eder yok o ise create işlemini gerçekleştiri

IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND OBJECT_ID = OBJECT_ID('dbo.DenetimBitir'))
BEGIN
    EXEC sp_executesql N' 
CREATE PROCEDURE  [dbo].[DenetimBitir](@DRef int )
AS
BEGIN
	IF @DRef IS NOT NULL
	BEGIN
		IF ((select count(*) from MGZDENETIM where DENETREF = @DRef) > 0 )  
		BEGIN
	
			update MGZDENETIM SET BITTAR = GETDATE() , BITSAAT = CONVERT(VARCHAR(5),GETDATE(),108)  where DENETREF = @DRef
		
		END 
	END  
END
'
END 
ELSE
BEGIN
      EXEC sp_executesql N'  
ALTER PROCEDURE [dbo].[DenetimBitir](@DRef int )
AS
BEGIN
	IF @DRef IS NOT NULL
	BEGIN
		IF ((select count(*) from MGZDENETIM where DENETREF = @DRef) > 0 )  
		BEGIN
	
			update MGZDENETIM SET BITTAR = GETDATE() , BITSAAT = CONVERT(VARCHAR(5),GETDATE(),108)  where DENETREF = @DRef
		
		END 
	END  
END
'
END


bu procedure ler diğer yazılımlarda kullanırken işlemlerinizi daha hızlı yapmanızı sağlar

Kullanımı ise aşağıdaki gibidir

DECLARE @RC int
DECLARE @DRef int

EXECUTE @RC = [dbo].[DenetimBitir] 
   @DRef
GO

SQL Server Menagment Studio da ise aşağıdaki resimdeki alanda yer alır

SQL Server Kontröllü Triger Oluşturma

Sql server da bir triger var mı diye kontrol edip var ise update yok sa create işlemini gerçekleştiren script

 IF NOT EXISTS(select * FROM sys.triggers where name = 'trg_HarSil')
BEGIN
    EXEC sp_executesql N' 
CREATE TRIGGER [dbo].[trg_HarSil] ON [dbo].[STOKHAREKET] FOR DELETE AS  
BEGIN SET NOCOUNT ON;
	DECLARE @TRGID INT
    SELECT @TRGID = deleted.ID FROM deleted
    delete from STOKHAREKET WHERE TRGID = @TRGID

END
'
END 
ELSE
BEGIN
      EXEC sp_executesql N'  
ALTER TRIGGER [dbo].[trg_HarSil] ON [dbo].[STOKHAREKET] FOR DELETE AS  
BEGIN SET NOCOUNT ON;
	DECLARE @TRGID INT
    SELECT @TRGID = deleted.ID FROM deleted
    delete from STOKHAREKET WHERE TRGID = @TRGID

END
'
END

yukarıdaki triger da STOKHAREKET tablosuna başka bir trigger ile kayıt edilen veriler bağlı hareket silindiğinde otomatik olarak trigger oluşmuş hareketleri temizler