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;






