У меня есть запрос, который работает:SQL Четкая ключевое слово в операторе присваивания
DECLARE @ProductID int
SET @ProductID = '1234'
SELECT DISTINCT TOP 12 a.ProductID
FROM A a
WHERE a.CategoryID IN (SELECT b.CategoryID FROM B b WHERE b.ProductID = @ProductID)
AND a.ProductID != @ProductID
возвращает список из 12 номеров продукции, все уникальные.
Мне нужно сохранить эти результаты в переменной, разделенной запятой, потому что это то, что требуется сторонней хранимой процедуре. Поэтому у меня есть следующее:
DECLARE @ProductID int
DECLARE @relatedprods varchar(8000)
SET @ProductID = '1234'
SET @relatedprods = ''
SELECT TOP 12 @relatedprods = @relatedprods + CONVERT(VARCHAR(20), a.ProductID) + ', '
FROM A a
WHERE a.CategoryID IN (SELECT b.CategoryID FROM B b WHERE B.ProductID = @ProductID)
AND a.ProductID != @ProductID
SELECT @relatedprods
Теперь ни один из них не отличается, но он возвращает 12 строк.
Теперь я добавляю «отчетливый» обратно, как и в первом запросе:
DECLARE @ProductID int
DECLARE @relatedprods varchar(8000)
SET @ProductID = '1234'
SET @relatedprods = ''
SELECT DISTINCT TOP 12 @relatedprods = @relatedprods + CONVERT(VARCHAR(20), a.ProductID) + ', '
FROM A a
WHERE a.CategoryID IN (SELECT b.CategoryID FROM B b WHERE B.ProductID = @ProductID)
AND a.ProductID != @ProductID
SELECT @relatedprods
только один продукт возвращается в разделенный запятыми список! «Различий» не работает в операторах присваивания? Что я сделал не так? Или есть способ обойти это?
Заранее благодарен!
ВЫВОД:
Я понятия не имею, что вызывает эту проблему, хотя предположение предложил кажется логичным. Я был в состоянии решить эту проблему с помощью подзапроса, и я его размещения, чтобы другие могли увидеть решение:
DECLARE @ProductID int
DECLARE @relatedprods varchar(8000)
SET @ProductID = '1234'
SET @relatedprods = ''
SELECT @relatedprods = @relatedprods + CONVERT(VARCHAR(20), c.ProductID) + ','
FROM (SELECT DISTINCT TOP 12 a.ProductID FROM A a WHERE a.CategoryID IN
(SELECT b.CategoryID
FROM B b
WHERE B.ProductID = @ProductID)
AND a.ProductID != @ProductID) c
SET @relatedprods = SUBSTRING(@relatedprods, 0, LEN(@relatedprods))
SELECT @relatedprods
@Brandi - Какая версия SQL Server? – Thomas
@Thomas - SQL Server 2008 – Brandi