1 Ekim 2016 Cumartesi

SQL Server Ayarları İçin T-SQL Komutları

SET NO COUNT : set nocount on olarak ayarlandığında, sayım döndürülmez. set nocount off olduğunda, sayısı döner.   Yapılması gereken sorgudan önce bu komutu çalıştırmaktır.
USE [AdventureWorks2016CTP3]
GO
SET NOCOUNT OFF;
GO
-- Display the count message.
SELECT TOP(5)LastName
FROM Person.Person
WHERE LastName LIKE 'A%';
GO
-- SET NOCOUNT to ON to no longer display the count message.
SET NOCOUNT ON;
GO
SELECT TOP(5) LastName
FROM Person.Person
WHERE LastName LIKE 'A%';
GO
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO 
SET ANSI_NULLS : SQL Server Null değerlerde where ifadesi kullanırken  nasıl bir ifadenin yazılacağı ANSI_NULLS özelliğine bağlıdır.  ANSI_NULLS özelliği ON olarak düzenlendiğinde  NULL ifadesi ile yapılan karşılaştırmalar false sonucunu döndürür yani arama listesine dahil edilmez.  Sorgu sonucunu dahil etmek için IS NULL  ve IS NOT NULL kullanılır. 
SQL Server varsayılan olarak ON modundadır.
ANSI_NULLS özelliğini OFF olarak düzenlendiğinde null kayıtlar diğer kayıtlarla karşılaştırılabilir duruma getirilir.

-- Create table t1 and insert values.
CREATE TABLE t1 (a INT NULL)
INSERT INTO t1 values (NULL)
INSERT INTO t1 values (0)
INSERT INTO t1 values (1)
GO

-- Print message and perform SELECT statements.
PRINT 'Testing default setting'
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname
SELECT *
FROM t1
WHERE a <> @varname
SELECT *
FROM t1
WHERE a IS NULL
GO

-- SET ANSI_NULLS to ON and test.
PRINT 'Testing ANSI_NULLS ON'
SET ANSI_NULLS ON
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname
SELECT *
FROM t1
WHERE a <> @varname
SELECT *
FROM t1
WHERE a IS NULL
GO

-- SET ANSI_NULLS to OFF and test.
PRINT 'Testing SET ANSI_NULLS OFF'
SET ANSI_NULLS OFF
GO
DECLARE @varname int
SELECT @varname = NULL
SELECT *
FROM t1
WHERE a = @varname
SELECT *
FROM t1
WHERE a <> @varname
SELECT *
FROM t1
WHERE a IS NULL
GO

-- Drop table t1.
DROP TABLE t1


SET ANSI_PADDING :ANSI_PADDING açık olduğunda Varchar değerleri ile boşluklar doldurulur ve Varbinary değerler null ile doldurulur .Gelecek sürüm Microsoft SQL ServerANSI_PADDING on her zaman olacaktır ve açıkça seçeneği off için ayarlanmış tüm uygulamaları bir hata üretecektir.
PRINT 'Testing with ANSI_PADDING ON'
SET ANSI_PADDING ON;
GO
CREATE TABLE t1 (
   charcol CHAR(16) NULL,
   varcharcol VARCHAR(16) NULL,
   varbinarycol VARBINARY(8)
);
GO
INSERT INTO t1 VALUES ('No blanks', 'No blanks', 0x00ee);
INSERT INTO t1 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);
SELECT 'CHAR' = '>' + charcol + '<', 'VARCHAR'='>' + varcharcol + '<',
   varbinarycol
FROM t1;
GO
PRINT 'Testing with ANSI_PADDING OFF';
SET ANSI_PADDING OFF;
GO
CREATE TABLE t2 (
   charcol CHAR(16) NULL,
   varcharcol VARCHAR(16) NULL,
   varbinarycol VARBINARY(8)
);
GO
INSERT INTO t2 VALUES ('No blanks', 'No blanks', 0x00ee);
INSERT INTO t2 VALUES ('Trailing blank ', 'Trailing blank ', 0x00ee00);
SELECT 'CHAR' = '>' + charcol + '<', 'VARCHAR'='>' + varcharcol + '<',
   varbinarycol
FROM t2;
GO
DROP TABLE t1
DROP TABLE t2

SET QUOTED_IDENTIFIER :SQL Server’da QUOTED_IDENTIFIER özelliği ile SQL Server için ayrılmış özel kelimeleri kullanarak nesne oluşturmamıza imkan sağlar. “Table,Group,Alter” vb. SQL Server için rezerve edilmiş kelimeleri kullanmamıza imkan sağlayan bir özelliktir.
SQL Server QUOTED_IDENTIFIER özelliği varsayılan olarak açık (ON) durumdadır.

SET QUOTED_IDENTIFIER OFF
GO
-- An attempt to create a table with a reserved keyword as a name
-- should fail.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO
SET QUOTED_IDENTIFIER ON;
GO
-- Will succeed.
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);
GO
SELECT "identity","order"
FROM "select"
ORDER BY "order";
GO
DROP TABLE "SELECT";
GO
SET QUOTED_IDENTIFIER OFF;
GO


SET CONCAT_NULL_YIELDS_NULL : SQL Serverda bu ayar ON olduğunda birleştirilen değerlerde NULL değer varsa birleştirme sonucu NULL değer döndürür.  OFF ise NULL değer boş değer olarak kabul edilecektir.
Gelecek sürüm SQL ServerCONCAT_NULL_YIELDS_NULL on her zaman olacaktır ve açıkça seçeneği off için ayarlanmış tüm uygulamaları bir hata üretecektir.

PRINT 'Setting CONCAT_NULL_YIELDS_NULL ON';
GO
-- SET CONCAT_NULL_YIELDS_NULL ON and testing.
SET CONCAT_NULL_YIELDS_NULL ON;
GO
SELECT 'abc' + NULL ;
GO

-- SET CONCAT_NULL_YIELDS_NULL OFF and testing.
SET CONCAT_NULL_YIELDS_NULL OFF;
GO
SELECT 'abc' + NULL;
GO
  
SET ANSI_WARNINGS : ON olarak ayarlandığında SUM, AVG, MAX, MIN, STDSAPMA, STDSAPMAS, VAR, VARP, ya da COUNT toplama işlemleri boş değer verdiğinde bir uyarı mesajı oluşur eğer OFF olarak ayarlanmışsa bir hata verilmez.
USE AdventureWorks2012;
GO

CREATE TABLE T1 (
   a INT,
   b INT NULL,
   c VARCHAR(20)
);
GO

SET NOCOUNT ON

INSERT INTO T1
VALUES (1, NULL, '');
INSERT INTO T1
VALUES (1, 0, '');
INSERT INTO T1
VALUES (2, 1, '');
INSERT INTO T1
VALUES (2, 2, '');

SET NOCOUNT OFF;
GO
 
PRINT '**** Setting ANSI_WARNINGS ON';
GO
 
SET ANSI_WARNINGS ON;
GO
 
PRINT 'Testing NULL in aggregate';
GO
SELECT a, SUM(b)
FROM T1
GROUP BY a;
GO
 
PRINT 'Testing String Overflow in INSERT';
GO
INSERT INTO T1
VALUES (3, 3, 'Text string longer than 20 characters');
GO
 
PRINT 'Testing Divide by zero';
GO
SELECT a / b AS ab
FROM T1;
GO
 
PRINT '**** Setting ANSI_WARNINGS OFF';
GO
SET ANSI_WARNINGS OFF;
GO
 
PRINT 'Testing NULL in aggregate';
GO
SELECT a, SUM(b)
FROM T1
GROUP BY a;
GO
 
PRINT 'Testing String Overflow in INSERT';
GO
INSERT INTO T1
VALUES (4, 4, 'Text string longer than 20 characters');
GO
SELECT a, b, c
FROM T1
WHERE a = 4;
GO

PRINT 'Testing Divide by zero';
GO
SELECT a / b AS ab
FROM T1;
GO

DROP TABLE T1


SET ARITHABORT:ON olarak ayarlandığında Sorgu yürütme sırasında taşma veya tarafından sıfıra bölme hatası oluştuğunda, bir sorgu sona erer. Eğer hata işlem sırasında meydana gelirse, işlem geri alınır.
off olarak ayarlandığında yukarda bahsedilen hatalardan biri meydana geldiğinde bir uyarı mesajı görüntülenir ama sorgu ya da işlem hiç bir hata olmamış gibi sürece devam eder.
set arithabort hesaplanmış klonlardaki indeksleri ve index viewları oluştururken ya da işlerken, on olarak ayarlanmalıdır.

-- SET ARITHABORT
-------------------------------------------------------------------------------
-- Create tables t1 and t2 and insert data values.
CREATE TABLE t1 (
   a TINYINT,
   b TINYINT
);
CREATE TABLE t2 (
   a TINYINT
);
GO
INSERT INTO t1
VALUES (1, 0);
INSERT INTO t1
VALUES (255, 1);
GO

PRINT '*** SET ARITHABORT ON';
GO
-- SET ARITHABORT ON and testing.
SET ARITHABORT ON;
GO

PRINT '*** Testing divide by zero during SELECT';
GO
SELECT a / b AS ab
FROM t1;
GO

PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab 
FROM t1;
GO

PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
GO

PRINT '*** Resulting data - should be no data';
GO
SELECT *
FROM t2;
GO

-- Truncate table t2.
TRUNCATE TABLE t2;
GO

-- SET ARITHABORT OFF and testing.
PRINT '*** SET ARITHABORT OFF';
GO
SET ARITHABORT OFF;
GO

-- This works properly.
PRINT '*** Testing divide by zero during SELECT';
GO
SELECT a / b AS ab 
FROM t1;
GO

-- This works as if SET ARITHABORT was ON.
PRINT '*** Testing divide by zero during INSERT';
GO
INSERT INTO t2
SELECT a / b AS ab 
FROM t1;
GO
PRINT '*** Testing tinyint overflow';
GO
INSERT INTO t2
SELECT a + b AS ab
FROM t1;
GO

PRINT '*** Resulting data - should be 0 rows';
GO
SELECT *
FROM t2;
GO

-- Drop tables t1 and t2.
DROP TABLE t1;
DROP TABLE t2;

GO

Sql Server DateTime Veri Tipindeki Datayı Türkçe Formatında Göstermek

  SQL'de tarihleri farklı formatlarda göstermek için FORMAT fonksiyonunu kullanabilirsiniz. Türkçe kısa tarih formatı genellikle "...