Bir SQL Hikayesi

January 31, 2007

Bazen MS-SQL kullandığımı unutup, MySQL’deki gibi sorgular yazıyorum. Geçen zaman diliminde geliştirdiğim bir projenin DB yapısında bazı refactoring işlemleri yaptıktan sonra; göç (migration) için gerekli olan SQL betiklerini(script) yazdım. Tabii alışkanlıktan aşağıdaki gibi bir betik hazırladım.

UPDATE Bid b, Product p SET p.CategoryId=b.CategoryId WHERE b.ProductId = p.Id; Daha sonra, yazdığım göç betiklerini test ederken gördüm ki, MSSQL bu işlemi desteklemiyor. Böyle bir işlemi yapabilmek için T-SQL yazmak gerekiyor. Sonrada aşağıda gördüğünüz kodu yazdım. Buraya da yazayım dedim; belki birinin T-SQL'de CURSOR örneğine ihtiyacı olur yada yukarıdaki gibi MySQL'de ki gibi MSSQL'de Multiple Update işlemi yapmak ister :-)

DECLARE cr_BidCategoryToProductCategory CURSOR FOR SELECT DISTINCT p.Id, b.CategoryId FROM Bid b, Product p WHERE b.ProductId = p.Id; DECLARE @productId int, @categoryId int; OPEN cr_BidCategoryToProductCategory; FETCH cr_BidCategoryToProductCategory INTO @productId, @categoryId WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE Product SET CategoryId = @categoryId WHERE Id = @productId;

FETCH cr_BidCategoryToProductCategory INTO @productId, @categoryId END CLOSE cr_BidCategoryToProductCategory; DEALLOCATE cr_BidCategoryToProductCategory;