-- Önceki cursor'ları kapat ve deallocate et (eğer varsa) IF CURSOR_STATUS('global', 'TableCursor') > -1 BEGIN CLOSE TableCursor DEALLOCATE TableCursor END DECLARE @TableName NVARCHAR(255) DECLARE @ConstraintName NVARCHAR(255) DECLARE @sql NVARCHAR(MAX) DECLARE TableCursor CURSOR LOCAL FOR -- LOCAL cursor kullanımı SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'ENLEM' INTERSECT SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'BOYLAM' OPEN TableCursor FETCH NEXT FROM TableCursor INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN -- ENLEM Kolonu için işlemler IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName AND COLUMN_NAME = 'ENLEM' AND DATA_TYPE <> 'float') BEGIN -- Tüm kısıtlamaları bul ve kaldır (Varsayılan, FK, Check vb.) DECLARE ConstraintCursor CURSOR LOCAL FOR -- LOCAL cursor kullanımı SELECT name FROM sys.check_constraints WHERE parent_object_id = OBJECT_ID(@TableName) AND parent_column_id = (SELECT column_id FROM sys.columns WHERE object_id = OBJECT_ID(@TableName) AND name = 'ENLEM') UNION ALL SELECT name FROM sys.default_constraints WHERE parent_object_id = OBJECT_ID(@TableName) AND parent_column_id = (SELECT column_id FROM sys.columns WHERE object_id = OBJECT_ID(@TableName) AND name = 'ENLEM') UNION ALL SELECT name -- Foreign Key kısıtlamaları için daha uyumlu bir yol FROM sys.foreign_key_columns fkc INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id AND fkc.parent_column_id = c.column_id WHERE fkc.parent_object_id = OBJECT_ID(@TableName) AND c.name = 'ENLEM' OPEN ConstraintCursor FETCH NEXT FROM ConstraintCursor INTO @ConstraintName WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = N'ALTER TABLE ' + @TableName + ' DROP CONSTRAINT ' + @ConstraintName EXEC sp_executesql @sql FETCH NEXT FROM ConstraintCursor INTO @ConstraintName END CLOSE ConstraintCursor DEALLOCATE ConstraintCursor SET @sql = N'ALTER TABLE ' + @TableName + ' ALTER COLUMN ENLEM FLOAT NOT NULL' EXEC sp_executesql @sql SET @sql = N'ALTER TABLE ' + @TableName + ' ADD CONSTRAINT DF_' + @TableName + '_ENLEM DEFAULT 0 FOR ENLEM' EXEC sp_executesql @sql END -- BOYLAM Kolonu için işlemler (Yukarıdaki adımların aynısı) --... (BOYLAM için olan kısım da benzer şekilde düzeltilmeli) FETCH NEXT FROM TableCursor INTO @TableName END CLOSE TableCursor DEALLOCATE TableCursor