-- Toplu INSERT işlemi
INSERT INTO hedefTablo(PKalanAdi, alanAdi1, alanAdi2...)
SELECT (PKalanAdi, alanAdi1, alanAdi1....) FROM kaynakTablo
-- Yukarıdaki durum Primary Key, auto increament olarak ayarlanmışsa
-- çalışmayacak çünkü, haberlerin id lerinide geçiyoruz.
-- Otomatik üretmemesi için aşağıdaki SQL çalıştırılır
SET IDENTITY_INSERT tabloAdi OFF
-- Tekrar aktif etmek için :
SET IDENTITY_INSERT tabloAdi ON
TSQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
TSQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
26 Eylül 2010 Pazar
Otomatik Primary Key üretimini TSQL ile durdurmak ve başlatmak
16 Ocak 2009 Cuma
T-SQL: Get only Date from DateTime
Sadece tarih bilgisidir.... Saat, dakika, saniye hep 0
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
2009-01-16 00:00:00.000
7 Ağustos 2008 Perşembe
TSQL-> SQL 2005 te WEB Servisi oluşturuyoruz 1
USE master
--Sisteme ie ile bağlandığımızda bize kullanıcı soracak.Onu create ediyoruz.
CREATE LOGIN
endpoint_owner
WITH
password='pwd'
-- Bakalım yapabilmiş miyiz?
SELECT NAME FROM master.dbo.syslogins
--Veri çekeceğimiz procedure
CREATE PROCEDURE dbo.usp_getContext
AS
BEGIN
SELECT SUSER_NAME() AS 'LOGIN', USER_NAME() AS 'USER NAME'
END
--Eğer soap_endpoint diye bir noktamız varsa silelim.
DROP ENDPOINT soap_endpoint
--Yeniden oluşturalım
CREATE ENDPOINT
soap_endpoint
AUTHORIZATION
endpoint_owner
STATE = STARTED
AS HTTP
(
PATH = '/sql',
AUTHENTICATION = (ntlm), --{ BASIC | DIGEST | INTEGRATED | NTLM | KERBEROS }
/* BASIC : SSL gerektirmektedir ve Base64 ile encode edilmiş virgül ile ayrılmış
kullanıcı adı ve parola bilgilerini kapsayan bir authentication header içermektedir.
DIGEST : Talep sunucuya gönderilmeden önce kullanıcı adı ve parola MD5 ile şifrelenir.
Sunucunun hem parolaya hem de MD5 hashine erişimi olduğu için doğrulama yapmak amacıyla
istemci tarafından sağlanan verileri karşılaştırma imkanı vardır.
Bu sayede istemci sunucuya, gerçek parolayı vermeden, gerçek parolayı bildiğini ispat edebilmektedir.
INTEGRATED : Sunucu önce Kerberos ile kimlik doğrulama yapmaya çalışır.
İstemcinin Kerberos'u desteklemiyor olması veya negotiation'ın mümkün olmaması durumunda, authentication NTLM'e döner.
NTLM : Windows 95, 98 ve NT 4.0 tarafından desteklenen bir authentication metodudur.
NTLM'de BASIC ve DIGEST'e göre daha güvenli ve aşılması zor bir yapıya sahiptir.
NTLM, Windows 2000 ve sonraki sürümlerde bir Security Support Provider Interface (SSPI) ile sunulmaktadır.
KERBEROS : Internet için standart bir mekanizmadır. Windows 2000 ve sonraki sürümlerde bir SSPI ile desteklenmektedir.
*/
PORTS = (clear),
SITE = '*'
)
FOR SOAP
(
WEBMETHOD 'GetContext'
(
name='master.dbo.usp_getContext'
),
WSDL = DEFAULT,
SCHEMA = STANDARD,
/*Kullanıcının kimliği doğrulandıktan sonra kullanıcı CREATE ENDPOINT ifadesinde yer alacak DATABASE
özelliği ile spesifik bir veritabanına yönlendirilebilir. */
DATABASE = 'master',
NAMESPACE = 'http://tempUri.org/',
LOGIN_TYPE = WINDOWS
);
--Bilgisayarımızda users altında tanımlı bir kullanıcıyı oluşturuyoruz.
CREATE LOGIN
[CNU6261Y11\soap_test]
FROM WINDOWS
SELECT * FROM master.dbo.syslogins
Endpoint imize bağlanabilsin diye yetkilendirelim
GRANT
CONNECT
ON
ENDPOINT::soap_endpoint
TO
[CNU6261Y11\soap_test]
------------------------------------ SIFIRDAN BİR TANE DAHA ----------------
-- Varsa silelim ENDPOINT imizi tekrar oluşturmadan önce
DROP ENDPOINT EuclidParametreleri
-- Varsa silelim kullanıcımızı tekrar oluşturmadan önce
DROP LOGIN [medula\endpointOwner]
/*
Windows içinde bir kullanıcı oluşturuyoruz.
NTLM yapacağımız için.
Kullanıcı adı: endpointOwner olacak.
*/
/*
SQL içinde de bu kullanıcıyı işaret ederek oluşturuyoruz.
Unutmayalım ki bu kullanıcıya SQL içinden bizim DB ye public
dbOwner gibi yetki vermezsek
There was an error in the incoming SOAP request packet: Client, LoginFailure, AccessDenied
hatası alırız.
*/
CREATE LOGIN
[medula\endpointOwner]
FROM WINDOWS
go
/*
ENDPOINT imizi oluşturuyoruz.
*/
CREATE ENDPOINT
EuclidParametreleri
-- Kullanıcımızı bu Endpoint e yetkili ilan edelim.
AUTHORIZATION
[medula\endpointOwner]
-- Durumunu BAŞLATILDI olarak ayarlayalım ki hemen çalışsın
STATE=STARTED
-- HTTP üzerinden çalışacak (TCP de olabilirdi)
AS HTTP
(
-- Demiştim, NTLM olacak ki Windows kullanıcımız işe yarasın
AUTHENTICATION = (NTLM),
-- http://sunucuAdi/sql/EuclidParametreleri?wsdl ile erişeceğiz
PATH = '/sql/EuclidParametreleri',
-- NTLM olduğu için CLEAR, BASIC olsaydı SSL olmak zorundaydı
PORTS = (CLEAR)
)
FOR SOAP
(
-- Metodumuzun adı
WEBMETHOD 'parametreler'
(
-- Tetikleyeceği Function ya da Procedure adı
NAME = 'EuclidLabImport.dbo.testOrtamiParametreleri'
),
-- WSDL olsun lütfen
WSDL = DEFAULT,
-- İlgileneceği VT adını girelim
DATABASE = 'EuclidLabImport'
)
go
-- Başka kullanıcılardan bu EndPointimize olan yetkilerini almak için
REVOKE CONNECT ON ENDPOINT::EuclidParametreleri FROM [medula\endpointOwner];
-- Başka kullanıcılara bu EndPointimize yetki vermek için
GRANT CONNECT
ON
ENDPOINT::EuclidParametreleri
TO
[medula\endpointOwner]
GO
Etiketler:
CREATE ENDPOINT,
CREATE LOGIN,
ENDPOINT,
GRANT,
TSQL,
WEB SERVICE
TSQL-> Kullanıcı oluştur. Database Kullanıcılarını getir. Kritere uyarsa Sil.
USE master
-- Kullanıcı oluşturuyoruz.
CREATE LOGIN
endpoint_owner
WITH
PASSWORD='pwd'
GO
CREATE
CREATE PROCEDURE Dbo.usp_getcontext
As
SELECT SUSER_NAME() as 'LOGIN', USER_NAME() AS 'USER NAME'
go
USE master
-- Kullanıcı oluşturuyoruz.
CREATE LOGIN
endpoint_owner
WITH
PASSWORD='pwd'
GO
SELECT SYSTEM_USER as 'SYSTEM USER' , SUSER_NAME() as 'LOGIN', USER_NAME() AS 'USER NAME'
IF EXISTS( SELECT NAME FROM master.dbo.syslogins WHERE NAME='endpoint_owner' )
DROP LOGIN endpoint_owner
SELECT NAME, LOGINNAME
FROM master.dbo.syslogins
WHERE NAME='endpoint_owner'
TSQL-> IF EXISTS DROP
IF EXISTS (SELECT * FROM [dbo].[sysobjects]
WHERE ID = object_id(N'[schema].[procedure]') AND
OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [schema].[procedure]
GO
CREATE PROCEDURE [schema].[procedure]
AS
BEGIN
25 Temmuz 2008 Cuma
TSQL de Inner Join ve Group By birlikte kullanmak
DECLARE @ay AS INT
SET @ay=1
DECLARE @yil AS INT
SET @yil=2008
SELECT h.hasta_id, h.adi+' '+h.soyadi [Adı Soyadı], s.total
FROM hastalar as h
INNER JOIN
(
SELECT refHasta_id, count(1) AS total
FROM seanslar AS s
WHERE s.refKlinik_id=71 AND month(tarihi)=@ay AND year(tarihi)=@yil AND durumu=1
GROUP BY refHasta_id
) AS s
ON s.refHasta_id=h.hasta_id
ORDER BY h.adi+' '+h.soyadi
hasta_id Adı Soyadı total
----------- ------------------- -----------
25123 ABDULKADİR KARAHAN 13
27420 ABDULKADİR UÇAN 9
24097 ABDULLAH DAKMAN 8
25091 ABDULLAH TUNÇ 14
SET @ay=1
DECLARE @yil AS INT
SET @yil=2008
SELECT h.hasta_id, h.adi+' '+h.soyadi [Adı Soyadı], s.total
FROM hastalar as h
INNER JOIN
(
SELECT refHasta_id, count(1) AS total
FROM seanslar AS s
WHERE s.refKlinik_id=71 AND month(tarihi)=@ay AND year(tarihi)=@yil AND durumu=1
GROUP BY refHasta_id
) AS s
ON s.refHasta_id=h.hasta_id
ORDER BY h.adi+' '+h.soyadi
hasta_id Adı Soyadı total
----------- ------------------- -----------
25123 ABDULKADİR KARAHAN 13
27420 ABDULKADİR UÇAN 9
24097 ABDULLAH DAKMAN 8
25091 ABDULLAH TUNÇ 14
Kaydol:
Kayıtlar (Atom)