SQL Server’da Tablodaki NULL Alanların Güncelleme Kodunu Oluşturan Prosedür
Herkese merhaba,
Bu yazıda SQL Server’da tablodaki NULL alanların güncelleme kodunu oluşturan prosedür hakkında bilgi vereceğim.
Aslında bu şekilde bir şey yapılabilir mi diye ilk başta düşündüm. Sonrasında Google’da aradım fakat bir şey bulamadım. Ben de böyle bir kod yazmaya karar verdim ki bu şekilde bir kod örneği internette de mevcut değil. Kısacası ilk ben yazmış oldum ve şu anda tektir.
Elinizde diyelim ki 200 kolonlu bir tablo var. Bu kadar kolon tablonuzda olabilir de olmayabilir de. Ben olabileceğini göz önünde bulundurarak bu yazıyı yazıyorum.
Her bir null değer içeren kolon için güncelleme kodunu yazdığınızı düşünün. Kolay olmayacaktır. Belki de ne gereği var diyorsunuz?
Ben NULL alan olarak genel değerleri yazdım. Siz kendinize göre düzenleyebilirsinizde.
Prosedür kodları aşağıdadır.
--Prosedürü oluşturma
CREATE PROC NullAlanlarıGuncellemeProseduru
(@TabloAdi NVARCHAR(100))
AS
BEGIN
SELECT t.name 'Data type',
CASE
WHEN t.name = 'int' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'varchar' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'bit' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'datetime' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = GETDATE() WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'smallint' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'tinyint' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'nvarchar' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'image' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'ntext' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'money' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'bigint' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'char' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'date' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = GETDATE() WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'datetime2' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = GETDATE() WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'decimal' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'float' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'nchar' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'real' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = 0 WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'binary' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'varbinary' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = '''' WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
WHEN t.name = 'smalldatetime' THEN
'UPDATE ' + @TabloAdi + ' SET ' + '[' + CAST(c.name AS VARCHAR(255)) + ']' + ' = GETDATE() WHERE '
+ CAST(c.name AS VARCHAR(255)) + ' IS NULL'
ELSE
''
END AS Sorgu
FROM sys.columns c
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.object_id = OBJECT_ID(@TabloAdi)
AND ISNULL(i.is_primary_key, 0) = 0;
END;
GO
--Prosedürün kullanımı
EXEC NullAlanlarıGuncellemeProseduru 'Products'; --Tablo adını yazacaksınız.
Prosedürü oluşturup çalıştırdığınızda aşağıdaki gibi bir sonuç alacaksınız. Ben örneği Northwind veritabanı üzerinde yaptım. Siz kendi veritabanınız üzerinde deneyebilirsiniz.
Görüldüğü üzere her bir kolon için NULL olan satırı güncelleyen Update satırı oluşturulmuş oldu. Kodu yazarken Primary Key kolonunu dahil etmedim. Bilgilerinize.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.