Bir SQL Hikayesi
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;