Databasedeki Tüm İndexleri Create Kodu ile Alma SQL Script

Bu script ile Sql Server daki Database ait tüm NONCLUSTERED indexleri listeleyip create kodlarını alabilirsiniz

SELECT 
    DB_NAME() AS DatabaseName, -- Veritabanı adı
    OBJECT_SCHEMA_NAME(i.object_id) + '.' + OBJECT_NAME(i.object_id) AS TableName, -- Şema ve tablo adı
    i.name AS IndexName, -- İndeks adı
    'CREATE ' + 
    CASE WHEN i.is_unique = 1 THEN 'UNIQUE ' ELSE '' END + 
    'NONCLUSTERED INDEX [' + i.name + '] ON ' + 
    OBJECT_SCHEMA_NAME(i.object_id) + '.' + OBJECT_NAME(i.object_id) +
    ' (' + 
    STUFF((
        SELECT ', ' + c.name
        FROM sys.index_columns ic
        JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
        WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 0
        ORDER BY ic.key_ordinal
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') +
    ')' +
    CASE 
        WHEN EXISTS (
            SELECT 1
            FROM sys.index_columns ic2
            WHERE ic2.object_id = i.object_id AND ic2.index_id = i.index_id AND ic2.is_included_column = 1
        ) THEN 
        ' INCLUDE (' + 
        STUFF((
            SELECT ', ' + c2.name
            FROM sys.index_columns ic2
            JOIN sys.columns c2 ON ic2.object_id = c2.object_id AND ic2.column_id = c2.column_id
            WHERE ic2.object_id = i.object_id AND ic2.index_id = i.index_id AND ic2.is_included_column = 1
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') + 
        ')' 
        ELSE '' 
    END AS CreateIndexScript
FROM 
    sys.indexes i
WHERE 
    i.type = 2 -- Non-clustered indeksler
ORDER BY 
    DatabaseName, TableName, IndexName;

Sql Server İçinde Veri Olan Tablolar

Sql server database inin içindeki tablolardaki kayıt sayılarını verir

SELECT 
    s.name AS SchemaName,
    t.name AS TableName,
    SUM(p.rows) AS [RowCount]
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.partitions p ON t.object_id = p.object_id
WHERE p.index_id IN (0, 1) -- 0: Heap, 1: Clustered Index
GROUP BY s.name, t.name
HAVING SUM(p.rows) > 0
ORDER BY [RowCount] DESC;

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