Является условное выражение T-SQL возможным пунктом TOP?

Я хочу динамично использовать TOP или не вид подобных это...

SELECT @SomeNumber CASE WHERE 0 THEN TOP 5 COLUMNNAME
                        ELSE COLUMNNAME
                   END
FROM TABLE
10
задан Răzvan Flavius Panda 2 November 2014 в 01:29
поделиться

6 ответов

Я только что использовал что-то вроде этого:-

Declare @SQL nvarchar(max), @Params nvarchar(max)
set @Params = N''
Set @SQL = N'SELECT ' + Cast(@SomeNumber as varchar) + ' CASE WHERE 0 THEN TOP 5 COLUMNNAME
                        ELSE COLUMNNAME
                   END
FROM TABLE'

exec sp_executesql @SQL, @Params
2
ответ дан 3 December 2019 в 15:21
поделиться

Не думаю, что ты сможешь.

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

Declare @int int

set @int = 10

exec ('Select top '  + @int + ' * From Customers')

или установить rowcount

if (@someNumber != 0)
begin
set rowcount 5
end

select * From Customers

set rowcount 0
6
ответ дан 3 December 2019 в 15:21
поделиться

Надеюсь, я понял вашу проблему: вы хотите выбрать TOP 5 строк, если передать @SomeNumber = 0, иначе выбрать все строки таблицы

В качестве первой прямой реализации вы можете сделать что-то вроде этого

declare @SomeNumber as int

set @SomeNumber = 5
-- set @SomeNumber = 1

SELECT TOP (SELECT @SomeNumber) COLUMNNAME FROM MYTABLE

Вы можете изменить значение параметра, чтобы иметь столько строк, сколько вы хотите


В противном случае я предлагаю вам реализовать хранимую процедуру (и, возможно, вы уже сделали это, иначе вы можете следовать следующим шагам, чтобы сделать это)

CREATE procedure [dbo].[TOPCLAUSE]

    -- clause parameter
    @SomeNumber as integer

AS

IF @SomeNumber = 0 
BEGIN
    SELECT TOP 5 COLUMNNAME FROM MYTABLE
END
ELSE
BEGIN
    SELECT COLUMNNAME FROM MYTABLE
END

GO

Затем вы можете вызвать

exec [dbo].[TOPCLAUSE] 0

exec [dbo].[TOPCLAUSE] 1

Возможно, я не ответил на ваш вопрос, но дайте мне знать, если это помогло вам

18
ответ дан 3 December 2019 в 15:21
поделиться

Два варианта: условный SQL или динамический SQL.

(1) Условный:

IF @SomeNumber = 0
    SELECT TOP 5 COLUMNAME FROM TABLE
ELSE
    SELECT COLUMNAME FROM TABLE

(2) Динамический: строим запрос в varchar() и передаем его в sp_execute

1
ответ дан 3 December 2019 в 15:21
поделиться

Я не думаю, что это возможно, потому что TOP применяется не только к столбцу, но и ко всей строке. Вам придется создать два разных оператора select и поместить их в конструкцию IF ELSE.

0
ответ дан 3 December 2019 в 15:21
поделиться

Короткий ответ - нет, не так, как у вас.

Однако вы можете использовать IF для проверки и выполнения другого запроса:

IF (@SomeNumber = 0)
BEGIN
   SELECT TOP 5 ColumnName FROM Table
END
ELSE
BEGIN
   SELECT ColumnName FROM Table
END
1
ответ дан 3 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: