SQL de tecrübe edinilmiş hazır sorgular aşağıdaki gibidir. 

 

SQL Tabloları, Kayıt Sayıları ve Kapasiteleri 

 

SQL de seçilen database içerisinde bulunan tabloların satır sayıları kapasitelerini toplu olarak listeleyen sorgudur. 

SELECT 
    s.Name AS SchemaName,
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM 
    sys.tables t
INNER JOIN 
    sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%'    -- filter out system tables for diagramming
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    s.Name, t.Name

 

SQL Ayraç Kullanımı

 

SQL de Ali, Veli, Can yazan bir yazıyı alt alta satırlara göndermek için fonksiyon örneğidir. 

Kullanımı select [dbo].[Ayrac] (‘Ali,Veli,Can’,’,’)

CREATE FUNCTION [dbo].[Ayrac] (@Kelime varchar(8000), @Sinirlayici char(1))

RETURNS @tempTable TABLE (items varchar(8000)) --max 8000 uzunluğunda karakter olabilir

AS

BEGIN

DECLARE @Sayi int

DECLARE @Ayrilmis varchar(8000)

SELECT @Sayi = 1

IF LEN(@Kelime)<1 OR @Kelime IS NULL RETURN

WHILE @Sayi != 0

BEGIN

SET @Sayi = CHARINDEX(@Sinirlayici, @Kelime)

IF @Sayi !=0

SET @Ayrilmis = LEFT(@Kelime, @Sayi-1 )

ELSE

SET @Ayrilmis = @Kelime

IF (LEN(@Ayrilmis) > 0)

INSERT INTO @tempTable (items) VALUES (@Ayrilmis)

SET @Kelime = RIGHT(@Kelime, LEN(@Kelime) - @Sayi)

IF LEN(@Kelime) = 0 BREAK

END

RETURN

END

 

INSERT TRIGER, ROOLBACK 

Girilen kaydın 14 karakterden fazla olmasını engellemek için aşağıdaki yapıyı kullanabilirsiniz. 

CREATE TRIGGER [dbo].[frt_STOK_KODU_14CH_KONTROLU] on [dbo].[STOKLAR]
for INSERT
AS
BEGIN
declare @stokkod nvarchar(50)
select @stokkod=x.sto_kod FROM INSERTED x

       if LEN(@stokkod)<>'20' --STOK KODUNUN KARAKTER SAYISINI BULUYOR. 14' E EŞİT OLUP OLMADIĞINI SORGULUYOR.
       begin

                    RAISERROR('STOK KODU 20 KARAKTERDEN AZ VEYA FAZLA OLAMAZ. KONTROL!!!',16,1)
                    ROLLBACK
                    goto cik
end
cik:
END

 

WHILE BEGIN KULLANIMI 

truncate table UKN_yuklemeozetdurum 

 

DECLARE @Sayac TINYINT =1

declare @dongu int = (select count(*) from UKN_PaletList )

declare @siraen int = 1

declare @siraboy int=1

declare @konteynerno int =1

 

--LİSTEDEKİ PALET SAYISI KADAR DÖNER

WHILE (@Sayac<=@dongu)

BEGIN

declare @stokkod nvarchar(20)=(select paletkod from #SanalTablo where sirano=@Sayac)

INSERT INTO STOKLAR (stokkod) VALUE(@stokkod)

select @sayac=@sayac+1

 

END

 

Tam Sayıyı Binlik Decimale Ayırma 

select
REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(varchar(20),CAST(txt_odeme_tutar as money),1),',','@'),'.',','),'@','.'),',00','') as "Amount"

 

TCMB Döviz Kurlarını Getiren Procedure

--Öncelikle bunu çalıştırın 

EXEC sp_configure 'show advanced options', 1; 

RECONFIGURE; 

GO EXEC sp_configure 'Ole Automation Procedures', 1; 

RECONFIGURE; 

GO

 

#########################################

 

 

 

USE [DATABASE]

GO

/****** Object:  StoredProcedure [dbo].[GunlukDovizKuruGetir]    Script Date: 10.4.2020 20:34:52 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROC [dbo].[LCN_GunlukDovizKuruGetir] 

AS BEGIN 

CREATE TABLE #DovizKuru 

Tarih DATE, 

ParaBirimAdeti NVARCHAR(100), 

ParaBirimi NVARCHAR(200), 

ParaBirimiAdi NVARCHAR(200), 

DovizAlis FLOAT, 

DovizSatis FLOAT, 

EfektifAlis FLOAT, 

EfektifSatis FLOAT 

); 

 

DECLARE @MerkezBankasiURL VARCHAR(500); SET @MerkezBankasiURL = 'https://www.tcmb.gov.tr/kurlar/today.xml'; 

DECLARE @OBJ AS INT; 

DECLARE @RESULT AS INT; 

EXEC @RESULT = sp_OACreate 'MSXML2.XMLHTTP', @OBJ OUT; 

EXEC @RESULT = sp_OAMethod @OBJ, 

'open', 

NULL, 

'GET', 

@MerkezBankasiURL, 

false; 

EXEC @RESULT = sp_OAMethod @OBJ, send, NULL, ''; 

CREATE TABLE #XML ( XMLDegeri VARCHAR(MAX) ); 

INSERT INTO #XML ( XMLDegeri ) EXEC @RESULT = sp_OAGetProperty @OBJ, 'responseXML.xml'; 

DECLARE @XMLYazi XML; 

SELECT @XMLYazi = XMLDegeri FROM #XML; 

DROP TABLE #XML; 

DECLARE @HDOC AS INT; 

EXEC sp_xml_preparedocument @HDOC OUTPUT, @XMLYazi; 

INSERT INTO #DovizKuru 

Tarih, 

ParaBirimAdeti, 

ParaBirimi, 

ParaBirimiAdi, 

DovizAlis,

DovizSatis, 

EfektifAlis, 

EfektifSatis 

SELECT CONVERT(DATE, GETDATE()) AS Tarih, 

* FROM OPENXML(@HDOC, 'Tarih_Date/Currency') 

WITH ( 

Unit NVARCHAR(100) 'Unit', 

Isim NVARCHAR(200) 'Isim', 

CurrencyName NVARCHAR(200) 'CurrencyName', 

ForexBuying FLOAT 'ForexBuying', 

ForexSelling FLOAT 'ForexSelling', 

BanknoteBuying FLOAT 'BanknoteBuying', 

BanknoteSelling FLOAT 'BanknoteSelling' ); 

SELECT * FROM #DovizKuru; 

END; --Prosedürün çalıştırılması 

 

##########################################

EXEC LCN_GunlukDovizKuruGetir

 

Silinen Kapatılan Geçmiş SQL Queryleri Geri Yükleme 

SELECT top 500 t.[text], s.last_execution_time
FROM sys.dm_exec_cached_plans AS p
INNER JOIN sys.dm_exec_query_stats AS s
   ON p.plan_handle = s.plan_handle
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
order by last_execution_time desc 

 

Tablo Kapasite Hesaplama Sorgusu 

SELECT 
    s.Name AS SchemaName,
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) * 8 AS TotalSpaceKB, 
    SUM(a.used_pages) * 8 AS UsedSpaceKB, 
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM 
    sys.tables t
INNER JOIN 
    sys.schemas s ON s.schema_id = t.schema_id
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%'    -- filter out system tables for diagramming
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, s.Name, p.Rows
ORDER BY 
    s.Name, t.Name

 

SQL de Sorguya Sıra Numarası Atama ROW_NUMBER()

select
ROW_NUMBER() OVER (ORDER BY sto_kod)
,sto_kod as StokKodu
,sto_isim as StokIsim
From TabloAdi

 

 

SQL SELECT INTO İle Tabloların Yedeğini veya Kopyasını Alma

 SELECT *  INTO yenitablo [hariciVeritabanı] 
 FROM tablo1;

______________________________

Hazırlayan : Caner Alican 

Bu ve benzeri konularda bilgi almak için info@lcngrup.com mail adresi üzerinden iletişime geçebilirsiniz.