Универсальный SQL для получения максимального значения заданных имен таблиц и столбцов как varchar - PullRequest
1 голос
/ 21 февраля 2009

очень просто использовать следующий SQL для получения значения для конкретного первичного ключа: идентификатор из конкретной таблицы: myTale:

DECLARE @v_maxID bigint;
SELECT @v_maxID = MAX(ID) FROM myTable;

Что мне нужно, так это общие коды SQL, чтобы получить максимальное значение для ключа из таблицы, где и ключ, и таблица определены как типы varchar (max) в качестве параметров:

DECLARE @v_maxID bigint;
-- SELECT @v_maxID = MAX(@p_ID) FROM @p_Table;

Я комментирую SELECT, так как он не работает. Я попытался построить строку SQL, и я могу EXEC ее, но я не могу получить максимальное значение обратно в мою локальную переменную (@v_maxID). Есть предложения?

Ответы [ 5 ]

5 голосов
/ 21 февраля 2009

Пользователи выбирают, но я считаю, что это ужасная идея (из-за чрезмерной генерализации). И неоптимизируемый. Просто напишите SQL.

5 голосов
/ 21 февраля 2009
DECLARE @max bigint, @sql nvarchar(max)
SET @sql = N'SELECT @max = MAX(' + @p_ID + ') FROM ' + @p_Table

EXEC sp_executesql 
    @query = @sql, 
    @params = N'@max bigint OUTPUT', 
    @max = @max OUTPUT 

PRINT @max
0 голосов
/ 21 февраля 2009

При BC состояниях вы должны использовать sp_executesql с параметром OUTPUT.

Как указать выходные параметры при использовании хранимой процедуры sp_executesql в SQL Server

0 голосов
/ 21 февраля 2009

Просто создайте запрос на уровне приложения, таким образом, выполняющийся запрос будет таким же, как и выше. Выполнение в sql, безусловно, откроет вам для SQL инъекции, так как вы должны использовать exec (). Также в любом случае будьте осторожны с пользовательским вводом.

0 голосов
/ 21 февраля 2009

Поправь меня, если я ошибаюсь, но разве ты просто не хочешь:

ВЫБЕРИТЕ МАКС. (ID) ИЗ mytable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...