2014-12-16 3 views
1

Мне нужно получить 10 лучших, 100 таких записей из таблицы. Но мне нужно назначить значение для верхнего предложения, такого как 10 или 100 в переменной.Ошибка синтаксиса при назначении переменной для верхнего предложения в sql-сервере

Но когда я даю, как показано ниже, он дает синтаксическую ошибку «Неправильный синтаксис рядом с« @numberofRecords ».».

DECLARE @numberofRecords INT 
SELECT @numberofRecords = ConfigValue FROM tblConfigItems (NOLOCK) WHERE configName = 'TopRecords' 

SELECT TOP @numberofRecords [ID],TypeID, MessageType, operationDate 
FROM NotifyTbl (NOLOCK) 
wHERE STATUS IN ('1', '2') 

Как достичь этого?

ответ

3

Избегайте динамичную SQL. Просто используйте это:

SELECT TOP (@numberofRecords) [ID],TypeID, MessageType, operationDate 
FROM NotifyTbl (NOLOCK) 
wHERE STATUS IN ('1', '2') 

Вам нужно как минимум SQL 2005, чтобы оно работало. Да() делает трюк.

+0

Я пробовал это в SQL Server 2008 R2, его не работало. – thevan

+0

@thevan Я пробовал это в SQL Server 2008 R2, он работает. возможно, вы могли бы предоставить некоторую техническую информацию, и не только «не работает». любое сообщение об ошибке? – Paolo

+0

Я попробовал это, прежде чем давать решение. Может быть, база данных в режиме совместимости SQL 2000? –

2

Вы можете использовать динамический SQL

exec('SELECT TOP ' + @numberofRecords + ' [ID],TypeID, MessageType, operationDate 
     FROM NotifyTbl (NOLOCK) 
     wHERE STATUS IN (''1'', ''2'')') 
+0

Да. его рабочий штраф .. – thevan

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

  • Нет связанных вопросов^_^