2012-05-30 7 views
1

Название вопроса может быть не самым лучшим, но я не смог найти другого, если мода найдет более точное описание проблемы, его можно отредактировать.Извлечение значения из EXEC (@sql)

Мне нужно построить dymanic запрос SQL, который имеет переменный параметр в верхнем пункте как

SELECT top (value) field, field2 FROM table 

Теперь бывший запрос на самом деле это подзапрос из этого запроса

SELECT @first = min(field2) FROM (SELECT top (value) field, field2 FROM table) 

, что означает, мне нужно exec(@sql), чтобы построить запрос, потому что sql top не принимает динамические значения, но exec(@sql) не позволяет мне получить параметр, насколько я знаю. Я прочитал в аналогичном случае, чтобы использовать sp_executesql для получения значения, но я не могу построить запрос с динамическим значением рядом с верхним предложением, я считаю. Что я могу сделать?

ответ

2

, если вы находитесь на SQL Server 2005 или выше, вы можете использовать переменную, чтобы сделать динамический верх, если вы все еще на 2000, вы можете использовать SET ROWCOUNT с переменной

2005 и выше синтаксиса

DECLARE @RowCount int -- =25 -- sql server 2008 allows to assign when declaring 
SELECT @RowCount = 25 

SELECT TOP (@RowCount) * FROM table1 

2000 синтаксис

DECLARE @RowCount int 
SELECT @RowCount = 25 

SET ROWCOUNT @RowCount 
SELECT * FROM table1 

SET ROWCOUNT 0 -- make sure to set back to 0 otherwise 
       -- queries below will return 25 rows 
2
declare @top int = 10 

select top (@top) field, field2 from table 
+0

Спасибо за фиксации - вы просто пропустили проекции (выбор поля). – SliverNinja

Смежные вопросы