-
harisma (01.03.08 15:17) [0]Господа мастера.
Есть некоторый набор последовательных запросов, оформленных в виде одного скрипта. Среди этих запросов есть и такой
SELECT TOP <переменная, вычисленная заранее в этом скрипте> FIELD1, FIELD2 ... FROM TABLE WHERE ....
Возник вопрос: Как правильно подставить в запрос эту переменную?
Говорю сразу - вариант типа
declare @s varchar(...)
set @s = 'select top ' + @переменная + ' FIELD1, FIELD2 FROM ...'
exec (@S)
не предлагать!!! -
b z (01.03.08 16:09) [1]SELECT TOP(<переменная, вычисленная заранее в этом скрипте>) FIELD1, FIELD2 ... FROM TABLE WHERE ....
-
harisma (01.03.08 16:16) [2]А ты это пробовал? Так не работает.
-
b z (01.03.08 16:19) [3]2005 на ура
или SET ROWCOUNT <переменная, вычисленная заранее в этом скрипте>
и не забыть "скинуть" в конце -
harisma (01.03.08 16:34) [4]А в SQL 2000 ругается
Line 1: Incorrect syntax near '('.
при коде
select top(5) RecID from dictionaries_C3AD665D2FD8E140 as D
то есть даже если явно указывать число в скобках, результата не получится. -
salexn (01.03.08 18:02) [5]попробуй сначала
SET ROWCOUNT
потом селект
затем
SET ROWCOUNT 0 (чтобы больше не было ограничений) -
harisma (01.03.08 18:27) [6]
> попробуй сначала
> SET ROWCOUNT
> потом селект
Так в принципе работает, но для моей задачи не подходит. Дело в том, что этот запрос с условием TOP я хочу использовать в следующей конструкции:
SELECT ... FROM TABLE_1
WHERE ... AND (FIELD1 IN (SELECT TOP <Число записей> FIELD1 FROM TABLE_2...)) AND (FIELD2 IN (SELECT TOP <> FIELD2 FROM TABLE_3 WHERE ...))
Все это должно работать под SQL 2000 и даже SQL 7.0, так что варианты для SQL 2005 не предлагать.
А может кто имеет что предложить как вообще такой скрипт по другому переписать, чтоб не иметь этих менингитов с TOP? -
DiamondShark © (03.03.08 17:02) [7]
> harisma (01.03.08 18:27) [6]
выбирай сначала во временные таблицы