Bir s q l hikayesi

31 Ocak 2007 · netologist · 1 dakika, 151 kelime

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;