Stored Procedure etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Stored Procedure etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2007-11-16

Publisher'a Tablo Ekleme ve Çıkarma

exec sp_addarticle @publication = N'pubAdi', @article = N'TabloAdi', @source_owner = N'dbo', @source_object = N'TabloAdi', @type = N'logbased',
@description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F, @force_invalidate_snapshot = 1,
@identityrangemanagementoption = N'manual', @destination_table = N'TabloAdi', @destination_owner = N'dbo', @vertical_partition = N'false', @ins_cmd =
N'CALL sp_MSins_dboTabloAdi', @del_cmd = N'CALL sp_MSdel_dboTabloAdi', @upd_cmd = N'SCALL sp_MSupd_dboTabloAdi'

exec sp_droparticle @publication = N'pubAdi', @article = N'TabloAdi', @force_invalidate_snapshot = 1

2007-09-21

Tablo Adını Değiştirme(Rename Table)

sp_rename SP'u ile birçok nesnenin ismini değiştirebildiğimiz gibi herhangi bir tablonun ismini de değiştirebiliriz.

Yazım Şekli : EXEC sp_rename 'TabloAdi' , 'YeniTabloAdi'

2007-07-30

SQL Server Adı Değiştirme

Change SQL Server Name
Bilgisayarınızın adı değiştiği zaman SQL Server'ın adı değişmeyecektir ve değişiklik çeşitli sorunlara neden olacaktır(Özellikle ismi değişen bilgisayar yada serverın SQL ine dışardan erişiyorsanız). Bu tür bir sorunun çözümü SQL Serverınızın adını da bilgisayar adıyla aynı olacak şekilde değiştirmektir. Bunu yapmak için aşağıdaki SP'leri kullanabilirsiniz:

exec sp_dropserver 'EskiServerAdi'
go
exec sp_addserver 'YeniServerAdi', 'local'
go

Değişikliği görebilmek için SQL Server servisinin restart edilmesi gerekiyor.

Örnek:
exec sp_dropserver 'MEHMETGUZEL'
go
exec sp_addserver 'GUZEL', 'local'
go

Not: SQL Server 2005/2008/2012/2014/2016/2017 versiyonları ile test edildi.

Stored Procedure Adını "SP_" ile Başlatmayınız!

SP adını "SP_" ön takısı ile başlatmak performansı düşürür çünkü SQL Server aşağıdaki sıra ile SP_ yi arar:
  1. Master DB,
  2. System SP leri "SP_" ile başlar. Eğer var olan bir system SP'u ile aynı adı taşıyan bir SP oluşturursanız SQL Server sistem SP'unu çalıştıracaktır.

Bu tür dezavantajlardan dolayı SP oluştururken stored procedure isimlerini "SP_" ile başlatmayın!

2007-07-24

Tüm SP'lere Execute Yetkisi

SQL Server 2005 te 'Mehmet' kullanıcısı için tüm SP lere Execute yetkisini vermek için aşağıdaki T-SQL kodunu çalıştırıp çıkan sonucu copy-paste yapıp çalıştırın:

DECLARE @strUserName sysname
SET @strUserName = 'Mehmet'
SELECT 'Grant exec on [' + Routine_Schema + '].[' + Routine_Name + '] TO [' + @strUserName + ']' FROM Information_Schema.Routines WHERE Routine_Type = 'Procedure'

2007-05-09

sp_configure

SQL server'ın konfigürasyon bilgilerini verir ve üzerlerinde değişiklik yapmamızı sağlar.


Örnek: sp_configure 'user connections', 11
Bu komut ile bu SQL Server'dan aynı anda 11 user yararlanabilir.

Örnek: sp_configure 'remote query timeout', 0
Server 'dan servera remote query timeout süresini 0 ile sınırsız yapmış olduk. remote query timeout süresi default olarak 600 sn(10 dakika)'dır.

2007-03-27

Agent'ı Otomatik Çalıştırma

SQL Server Service Manager'daki “Auto-Start Service When OS Starts" seçeneğini aşağıdaki gibi SP yardımıyla değiştirebilirsiniz:

//Agent ı otomatik çalışmasını sağlama
exec msdb..sp_set_sqlagent_properties @auto_start = 1

//Agent ı otomatik çalışmamasını sağlama
exec msdb..sp_set_sqlagent_properties @auto_start = 0

2007-02-15

Örnek SP


/*
Bu SP ile UrunAltSirket tablosundaki Alt Sirket kodlarını alıp PARCA tablosundaki
AltSirketKodu nu update edeceğiz.
*/
//Tanımlamalarımızı yapıyoruz.
DECLARE @parcano varchar(32)
DECLARE @AltSirket varchar(3)
DECLARE @var int
DECLARE @say int

//Cursorumuzu tanımlıyoruz

DECLARE crUrun CURSOR FOR

SELECT parcano, AltSirketKodu
FROM UrunAltSirket


//Cursorumuzu açıyoruz

OPEN crUrun
FETCH NEXT FROM crUrun INTO @parcano, @AltSirket

SET @say=0

//Cursorumuzdeki verileri döngüye sokup bu veriler üzerinden işlem yapıyoruz
WHILE @@FETCH_STATUS=0
BEGIN
//Ürünümüzün ürün tablosunda olup olmadığını kontrol ediyoruz
SET @var=(SELECT COUNT(parcano) FROM PARCA WHERE parcano=@parcano)
IF @VAR>0
BEGIN
SET @Say=@Say+1
PRINT @say

//Ürünün alt şirket kodunu update ediyoruz
UPDATE PARCA
SET AltSirketKodu=@AltSirket
WHERE parcano=@parcano
END

//Cursoru bir sonraki bloğa kaydırıyoruz
FETCH NEXT FROM crUrun INTO @parcano, @AltSirket
END

CLOSE crUrun //Cursorumuzu kapattık
DEALLOCATE crUrun //Cursorumuzu sildik

2007-01-24

sp_special_columns

Bu SP ile bir tabloda unique olan alan adları ve bunlara ait bilgileri alabilirsiniz.

Syntax
sp_special_columns [@name=] 'name' [,[owner=] 'owner'] [,[@qualifier=] 'qualifier'] [,[@col_type=] 'col_type'] [,[@scope=] 'scope'] [,[@nullable=] 'nullable'] [,[@ODBCVer=] 'ODBCVer']

sp_server_info

sp_server_info SP ile SQL Serverınız hakkında birçok bilgiye ulaşabilirsiniz. İlişkili Veritabanı Sisteminin adı, versiyonu, collation tipi, index için kullanılacabilecek maksimum alan sayısı vs gibi bilgilere ulaşabilirsiniz.

Syntax
sp_server_info [[@attribute_id =] 'attribute_id']

2007-01-22

sp_pkeys ve sp_fkeys

Bir tablodaki primary key yada keyleri sp_pkeys, foreign keyleri ise sp_fkeys SP leri ile alabilirsiniz.

Syntax
sp_pkeys [ @table_name = ] 'name' [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ]

Syntax
sp_fkeys [ @pktable_name = ] 'pktable_name' [ , [ @pktable_owner = ] 'pktable_owner' ] [ , [ @pktable_qualifier = ] 'pktable_qualifier' ] { , [ @fktable_name = ] 'fktable_name' } [ , [ @fktable_owner = ] 'fktable_owner' ] [ , [ @fktable_qualifier = ] 'fktable_qualifier' ]

Örnek:
--Primary key için
EXEC sp_pkeys 'SIPARIS'

--Foreign key için
EXEC sp_fkeys 'SIPARIS'

sp_columns

Çoğumuz ah keşke şu tablomda bulunan alan adlarını ve bu alan adlarına ait tanımlamaları bir şekilde öğrensek dediğimiz oldu. Bunu system tablolarından yada kataloglar sayesinde zahmetli bir şekilde istediğimiz bilgiye ulaştık. MS SQL Server'da bu işi yapan sp_columns adlı SP miz var.

Syntax
sp_columns [ @table_name = ] object [ , [ @table_owner = ] owner ] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ]

sp_columns SP si ile aşağıdaki alanlara iat bilgiler elde edilebilir:
TABLE_QUALIFIER
TABLE_OWNER
TABLE_NAME
COLUMN_NAME
DATA_TYPE
TYPE_NAME
PRECISION
LENGTH
SCALE
RADIX
NULLABLE
REMARKS
COLUMN_DEF
SQL_DATA_TYPE
SQL_DATETIME_SUB
CHAR_OCTET_LENGTH
ORDINAL_POSITION
IS_NULLABLE SS_DATA_TYPE

Örnek: SIPARIS tablomuzda bulunan alan adları ve alan adlarının özelliklerini aşağıdaki komut ile alabiliriz.

EXEC sp_columns 'SIPARIS

sp_tables

Çoğu zaman merak ederiz: Veritabanımızda bulunan tablo adlarımızı nasıl alabiliriz diye. İşte veritabanında hangi tabloların olduğunu merak eden arkadaşlar için sp_tables adlı SP miz var. sp_tables ile tablo adlarının yanında tablonun tipine(SYSTEM TABLE, TABLE, VIEW) de erişebiliriz.

Syntax
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ]
[ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ]


Örnek 1: Veritabanındaki tüm tablo adlarını listeleyelim.

exec sp_tables

Örnek 2: Veritabanımızda bulunan SIPARIS adlı tablomuzu listeleyelim.

exec sp_tables 'SIPARIS'


Örnek 3: Sadece veritabanımızda tabloları listeleyelim:

exec sp_tables @table_type="'TABLE'"


Örnek 4: Sadece veritabanımızda viewları listeleyelim:

exec sp_tables @table_type="'VIEW'"


Örnek 5: Sadece veritabanımızda sistem tablolarını listeleyelim:

exec sp_tables @table_type="'SYSTEM TABLE'"


sp_databases

sp_databases SP miz ile SQL Server altında bulunan veritabanlarının adları ve büyüklükleri hakkında bilgi alabiliriz.

Syntax
sp_databases

sp_stored_procedures

Daha önce SP isimlerinin listesini basit bir SQL ile halletmiştim. Şimdi ise yazdığım SQL in yerine MS SQL Server'da bu iş için yazılmış olan sp_stored_procedures ile de halledebiliriz:

Syntax
sp_stored_procedures [[@sp_name =] 'name'] [,[@sp_owner =] 'owner'] [,[@sp_qualifier =] 'qualifier']

Parametre olarak herhangi bir şey girmezseniz o aktif veritabanında bulunan tüm SP isimleri hakkında bilgi verir.

2007-01-20

sp_table_privileges

Tablo erişimi ile ilgili izinleri görebilmek için kullanılır.

Syntax:
sp_table_privileges [ @table_name_pattern = ] 'table_name_pattern' [ , [ @table_owner_pattern = ] 'table_owner_pattern' ] [ , [ @table_qualifier = ] 'table_qualifier' ]

SIPARIS tablomla ilgili izinlere bakmak istersem SP mizi aşağıdaki gibi çalıştırırız:

EXEC sp_table_privileges siparis

Sonuç çıktısı aşağıdaki gibi olur:

TABLE_QUALIFIERTABLE_OWNERTABLE_NAMEGRANTORGRANTEEPRIVILEGEIS_GRANTABLE
ithalatdboSIPARISdbodboDELETEYES
ithalatdboSIPARISdbodboINSERTYES
ithalatdboSIPARISdbodboREFERENCESYES
ithalatdboSIPARISdbodboSELECTYES
ithalatdboSIPARISdbodboUPDATEYES

2007-01-19

SP_LOCK

Aktif locklar hakkında bilgiyi raporlamaya yarar. Parametre kısmına process ID leri girerek processler hakkında bilgi alabilirsiniz. Herhangi bir parametre girmezseniz lock olan tüm processler listelenir.

Syntax:
sp_lock [[@spid1 =] 'spid1'] [,[@spid2 =] 'spid2']

2007-01-10

Add Linked Server

Dağıtık sorgular yazabilmek için SQL Serverlarınızı bir birbirine bağlayabilirsiniz. Bunun için sp_addlinkedserver sp'sini kullanabilirsiniz.

Söz dizimi:
sp_addlinkedserver [@server=] 'server' [, [@srvproduct=] 'product_name'] [, [@provider=] 'provider_name'] [, [@datasrc=] 'data_source'] [, [@location=] 'location'] [, [@provstr=] 'provider_string'] [, [@catalog=] 'catalog']

Örnek: CETURK adlı SQL Serverımızı kendi serverımıza link edelim:

USE master
EXEC sp_addlinkedserver 'CETURK', N'SQL Server'

Dipnot: Bu sp yi kullanabilmek için sysadmin ve setupadmin server rollerinizin olması lazım.

MD5 ile Şifreleme

İstediğiniz bilgileri şifrelemek için XP_MD5 Extended Stored Procedure kullanabilirsiniz.(xp_md5.dll dosyasını CodeProject'en indirebilirsiniz.)
xp_md5.dll dosyasını aşağıdaki gibi manuel olarak ekleyebilirsiniz(bu ekleme xp_md5 Extended Stored procedure nı oluşturur):

USE master;
EXEC sp_addextendedproc 'xp_md5', 'xp_md5.dll'

İşinize yarayacak şekilde xp_md5 içerecek bir User Defined Function oluşturabilirsiniz:

CREATE FUNCTION [dbo].[fn_md5] (@string VARCHAR(8000))
RETURNS CHAR(32)
AS
BEGIN
DECLARE @hash CHAR(32)
EXEC master.dbo.xp_md5 @string, @hash OUTPUT RETURN @hash
END


Tanımladığımız User Define Function u aşağıdaki gibi kullanabilirsiniz:

SELECT dbo.fn_md5('Hello world!')

Yukardaki ifadenin çıktısı : 86fb269d190d2c85f6e0468ceca42a20 olur.
Bunun yerine direk olarak xp_md5 Extended Stored Procedure nı da aşağıdaki şekilde kullanabilirsiniz:

EXEC master.dbo.xp_md5 'Hello world!'

Bu ifadenin çıktısı da: 86fb269d190d2c85f6e0468ceca42a20 olur.

Kullanıcı Silme

Var olan bir logini silmek için ise sp_droplogin sp'ü kullanabilirsiniz.
Syntax:
sp_droplogin [ @loginame = ] 'login'

Örnek: SQL Server'dan Mehmet loginname ni silelim:

EXEC sp_droplogin 'Mehmet'

Kısıtlama: Sadece sysadmin and securityadmin sunucu rollerine sahip olan kullanıcılar sp_droplogin sp'ünü kullanabilir.

Not: Silinmek istenen login herhangi bir database de map edilmişse sp_droplogin ile silinemez. Önce sp_dropuser ile kullanıcı silinmeli ardından login sp_droplogin ile silinmeli.

.::YASAL UYARI::.

©2004-2024 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.