Özgür Özvarış

Bir yazılımcının kırık dökük dünyası

MSSQL Basit Cursor - 2

clock Kasım 5, 2018 13:10 by author OzgurOzvaris

Merhaba

Dün yeni bir cursor'a daha ihtiyacım oldu,

Belki faydası olabilir paylaşıyorum.

DECLARE @email VARCHAR(250) 
DECLARE @TANIM VARCHAR(256) 
DECLARE @FCCM1_ID numeric(12,0) 
DECLARE @COUNT int
 

set @COUNT = 0
 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 
 
DECLARE db_cursor CURSOR FOR  
SELECT email from unsubscribed_members_export_ef5$ 

 
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @email
 
WHILE @@FETCH_STATUS = 0   
BEGIN   
       

	   if EXISTS (select TANIM FROM FCCM8_T WHERE TANIM = @email) 
	   begin
		
		
		select @FCCM1_ID  = FCCM1_ID  FROM FCCM8_T WHERE TANIM = @email

		IF NOT EXISTS (select FCCM1_ID from FCCM6 WHERE FCCM1_ID = @FCCM1_ID)
		begin
			insert FCCM6(FCCM1_ID,FSMUSOZEL_ID,FSOZLDEGER_ID) values( @FCCM1_ID, 79, 73)
			set @COUNT = @COUNT + 1
			print cast(@COUNT as varchar(10)) + ' '+ @email + ' ' + cast( @FCCM1_ID as varchar(10))

		end
		

	   end
 
       FETCH NEXT FROM db_cursor INTO @email
END  
 
print cast(@COUNT as varchar(10)) + ' '+ @email

CLOSE db_cursor   
DEALLOCATE db_cursor

Umarım faydası olur . İyi çalışmalar.

 



Sql Server Foreign Key relationship

clock Ağustos 2, 2018 10:42 by author OzgurOzvaris

Merhaba,

kaynak : https://stackoverflow.com/questions/868620/sql-script-to-alter-all-foreign-keys-to-add-on-delete-cascade/50993672

 

Geçen bir ikincil indexi silmemiz gerekti. İlginç bir şekilde mssql Foreign Key relationship lerini bu ikincil indexe bağlamış tabloya ait bütün relationlarda gitti. Bizde mevcut bir müşteri database'inden bir tabloya ait relationları alan bir script arayışan girdik. Paylaşıyorum.

 

SELECT  
         KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME 
        ,KCU1.TABLE_SCHEMA AS FK_SCHEMA_NAME 
        ,KCU1.TABLE_NAME AS FK_TABLE_NAME 
        ,KCU1.COLUMN_NAME AS FK_COLUMN_NAME 
        ,KCU1.ORDINAL_POSITION AS FK_ORDINAL_POSITION 
        ,KCU2.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT_NAME 
        ,KCU2.TABLE_SCHEMA AS REFERENCED_SCHEMA_NAME 
        ,KCU2.TABLE_NAME AS REFERENCED_TABLE_NAME 
        ,KCU2.COLUMN_NAME AS REFERENCED_COLUMN_NAME 
        ,KCU2.ORDINAL_POSITION AS REFERENCED_ORDINAL_POSITION 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC 

    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1 
        ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
        AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
        AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME 

    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2 
        ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG  
        AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA 
        AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME 
        AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION AND KCU2.TABLE_NAME = 'FSYS_DVZ'

 

Bu sorgu sadece listeliyor. oluşacak scriptin tamamı için kaynak bölümündeki url e bakabilirsiniz.

 

İyi çalışmalar.



Common Table Expression (CTE)

clock Mayıs 28, 2018 16:00 by author OzgurOzvaris

Merhaba,

Kaynak : When to use Common Table Expression (CTE)

How to create Temp Table with month columns based on date parameters?

Eğer sql ile recursive bir aylar yada yıllar listesi oluşturmak isterseni bu yöntemi kullanabilirsiniz

Günler döngüsü

DECLARE @StartDate DATE = '6/1/2013';

WITH Tablo(MDate) AS (
      SELECT @StartDate AS MDate
      UNION ALL
      SELECT DATEADD(dd, 1, MDate)
      FROM Tablo
      WHERE DATEADD(dd, 1, MDate) < DATEADD(mm, 1, @StartDate)
   )
SELECT MDate FROM Tablo
--temp tabloya al
SELECT  MDate INTO #tmp1 FROM Tablo

Aylar döngüsü

declare @start_date DATE = '20160101' 

;WITH CTE AS
(
    SELECT @start_date AS cte_start_date, DATENAME(month, @start_date) AS NAME , 0 AS Coun
    UNION ALL
    SELECT DATEADD(MONTH, 1, cte_start_date), DATENAME(month, DATEADD(MONTH, 1, cte_start_date)) AS NAME , 0 AS Coun
    FROM CTE
    WHERE DATEADD(MONTH, 1, cte_start_date)  < DATEADD(yy, 1, @start_date)  
)
Select * from CTE
--temp tabloya al
SELECT  Coun,Name INTO #tmp1 FROM CTE

İyi çalışmalar.



Query column type alma

clock Kasım 14, 2017 13:56 by author OzgurOzvaris

Merhaba Arkadaşlar,

Kaynak : https://stackoverflow.com/questions/20107827/insert-data-into-temp-table-with-query

Entityframe work kullanıyorsanız şöyle bir ihtiyacınız olacaktır. Bazen karmaşık sql sorgu üzerinden rapor almanız gerekecektir. Bu durumda uzun select query'i entity framework'e çevirmek çok ta mantıklı değildir. Öyle ise mevcut sorgularınızı Context.ExecuteStoreQuery<cListType> methodu ile classlara çevirmeniz gerekmektedir. Bu durumda eğer sorgunuzun çok fazla kolonu var ise bu kolonların class karşılıklarının hangi tiple olması gerektiğini teker teker bilmeniz gerekmektedir. Bu işlemi tek tek yapmak istemiyorsanız aşağıdaki yöntem işinize yarayacaktır.

SELECT TOP 10 *
INTO #TempTable
FROM <DataSource>
Then use:

EXEC tempdb.dbo.sp_help N'#TempTable';
or

SELECT * 
FROM tempdb.sys.columns 
WHERE [object_id] = OBJECT_ID(N'tempdb..#TempTable');

istediğini kolon tipleri bilgisini aldıktan sonra

DROP TABLE #TempTable

sql scripti ile temp tabloyu silebilirsiniz.

İyi çalışmalar.



Sql Server foreign key colum query script

clock Ekim 23, 2017 17:36 by author OzgurOzvaris

Merhaba,

Kaynak : https://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/ 

Database büyüdükçe sorunlarda onunla birlikte büyüyor. Sql scriptler burada hayat kurtarıcı olabiliyor. Yeni bir tablo veya kolon eklediğinizde bir müddet sonra isim vermekten yorulsunuz ve yönetememey başlarsınız sql server'ın otomatik olarak kullandığı isimleri vermeye başlarsınız. Ancak bu seferde çok fazla relation barındıran bir tabloda hangi relation la hangi kolonları yönettiğinizi bulmak zorluk olmaya başlar.

Bu gün hangi tablolardan hangi kolonların birlikte relation bağlantı kurduğunu gösteren sorguyu paylaşacağım.

SELECT
K_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
---- optional:
ORDER BY
1,2,3,4
WHERE PK.TABLE_NAME='something'WHERE FK.TABLE_NAME='something'
WHERE PK.TABLE_NAME IN ('one_thing', 'another')
WHERE FK.TABLE_NAME IN ('one_thing', 'another')

 

İyi çalışmalar.



sp_change_users_login

clock Şubat 27, 2017 13:51 by author OzgurOzvaris

Bir database backup dosyanız üzerinde bazı kullanıcılar var ve bunları yeni bir mssql server'a aynı isimli başka bir database'e restore etmek isterseniz bu sp_change_users_login stored procedunun çok önemli olduğunu görüceksiniz.

MSSQL sunucunuza aynı kullanıcıyı ekleseniz dahi yeni açtığınız kullanıcının SID si farklı olduğu için database kullanıcınız ve Server kullanıcınız arasında uyumsuzluk olacaktır.

Belki ileride MSSQL bu sorunu halleder....

Ama şimdilik bu sorunu halledebilmek için 

use testDB

exec

sp_change_users_login 'update_one', 'testDBuser', 'testDBuser'

storedprocedurünü kullanmanız gerekmektedir. Bu komuttan sonra database kullanıcısı ve server kullanıcısı arasındaki SID eşitlenmiş olur.

İyi çalışmalar.



MSSQL Bir kolon var mı, varsa değeri ne sorgusu

clock Ocak 29, 2017 00:15 by author OzgurOzvaris

Merhaba Arkadaşlar,

Sistem tabloları üzerinden sorgu yazıp, dinamik bir sogu çalıştırıp bunu cursor vasıtası ile bir temp tabloya doldurup bu aradağımız kolonun değerini alacağız. Bu sorguyu kendim multi language tabloların db deki tablo id lerini almak için kullanıyorum.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @sqlCommand varchar(1000)
--database deki bütün tabloların listesini cursor a ekle
DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM sys.tables tabels 

CREATE TABLE #tmpTable
(
    TBL_ID int,
    Name varchar(50)
    
)

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
-- TBL_ID kolonu var ise temp tabloya ekle...
       IF EXISTS(
			SELECT *
			FROM sys.columns 
			WHERE Name      = N'TBL_ID'
			  AND Object_ID = Object_ID(@name) 
			  AND Object_ID <>  Object_ID(N'FSYS_DICTIONARY'))
		BEGIN
			-- Column Exists
			--PRINT @name
			SET @sqlCommand = 'insert into #tmpTable Select TOP 1 TBL_ID, ''' + @name + ''' FROM ' + @name 
			--PRINT @sqlCommand
			EXEC (@sqlCommand)
			
		END


       FETCH NEXT FROM db_cursor INTO @name   
END

SELECT * FROM  #tmpTable  Order By TBL_ID Desc

DROP TABLE #tmpTable
CLOSE db_cursor   
DEALLOCATE db_cursor

İyi çalışmalar

 



MSSQL Basit Cursor

clock Ocak 28, 2017 23:47 by author OzgurOzvaris

Merhaba,

Kaynak : sql-server-cursor-example 

Ara ara sql serverda faydalı olacak scripler girmeye devam ediyorum. Bu gün ki script basit bir cursor oluşturup içinde while döngüsü ile dönmek.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 

SET @path = 'C:\Backup\'  

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM MASTER.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  

       FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

Örnektre mssql altındaki tüm dblerin backuplarını alan bir script oluşturuyor.

İlginizi çekebilir Basit Cursor 2 .

İyi çalışmalar.

 

 



Sql database'de tablo kolon'u arama

clock Ağustos 31, 2016 15:12 by author OzgurOzvaris

Merhaba arkadaşlar,

Bazen elinize uzunca bir sql geçer ve tabloların kolon adları yazmıyor olabilir bu durumda select bölümündeki kolonların hangi tabloya ait olduğunu anlamakta güçlük çekebilirsiniz. Böyle bir durumda paylaşacağım script aradığınız kolonun hangi tablolarda bulunduğunu listelemekte işinize yarayacaktır.

SELECT
    tabels.name 'Table Name',
    c.name 'Column Name',
    t.Name 'Data type',
    c.max_length 'Max Length',
    c.precision ,
    c.scale ,
    c.is_nullable,
    ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM   
    sys.tables tabels
INNER JOIN    
     sys.columns c ON tabels.object_id = c.object_id
INNER JOIN
    sys.types t ON c.user_type_id = t.user_type_id
LEFT OUTER JOIN
    sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
    sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
    c.name = 'PACIKLAMA'

 

 İyi çalışmalar.

 

 



Sql tablo listesi alma

clock Ağustos 31, 2016 15:01 by author OzgurOzvaris

Merhaba ,

Basit bir sorgu ile tablo listelerini alabiliryosrunuz?

Select 
   NAME 'Table Name'
from sys.tables

İyi çalışmalar.



Hakkımızda  AboneOl 

Blog Yayınımıza Hoşgeldiniz.

Month List

RecentPosts

Sign In