#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-server-2008
Вопрос:
Когда я задаю условие с помощью запроса select и сохраняю в переменной, и в этом условии я задаю запрос insert в то время, когда возникают эти проблемы
Вот мой запрос
create table #temp
(
productid int
)
--Insert into #temp
Insert into #temp
select Product.Id
from Product
left join mysql_abc_Product on mysql_abc_Product.ProductId = Product.ID
where mysql_abc_Product.ProductId is NULL
Declare @maxCount int = (select count(productId) from #temp)
WHILE(@i <= @maxCount)
BEGIN
select * from #temp
declare @ModelID int
SET @ModelID = (select DISTINCT tmp.ProductId, s.Id, l.Id
from Language l, Store s, #temp tmp, Product p
left join mysql_abc_Product isp on isp.ProductId = p.Id
where isp.Id is NULL
and p.Deleted = 'False'
or p.Published = 'True'
or VisibleIndividually = 'True')
if(@ModelID > 0)
Insert into mysql_abc_Product(ProductId, SolrStatus, IsDeleted, InTime, StoreId, LanguageId)
select DISTINCT
tmp.ProductId, 1, 0, GETDATE(), s.Id, l.Id
from
Language l, Store s, #temp tmp, Product p
left join
mysql_abc_Product isp on isp.ProductId = p.Id
where
isp.Id is NULL
else
Insert into mysql_abc_Product(ProductId, SolrStatus, IsDeleted, InTime, StoreId, LanguageId)
select DISTINCT
tmp.ProductId, 1, 0, GETDATE(), s.Id, l.Id
from
Language l, Store s, #temp tmp, Product p
left join
mysql_abc_Product isp on isp.ProductId = p.Id
where
isp.Id is NULL
SET @i = @i 1
END
drop table #temp
END
Комментарии:
1. Вредные привычки для устранения: использование объединений в старом стиле — этот стиль списка таблиц, разделенных запятыми, в старом стиле был заменен на надлежащий синтаксис ANSI в стандарте SQL ANSI-
JOIN
92 ( более 20 лет назад), и его использование не рекомендуется. …………………. ( И вам определенно не следует их смешивать!!