хранимая процедура sql server использует varchar max в качестве параметра

У меня есть относительно простой сайт, который использует php + mssql. У меня есть различные хранимые процедуры, которые делают простую вставку и удаление работы. Проблема, с которой я сталкиваюсь, заключается в том, что многие параметры, которые я передаю в хранимую процедуру, имеют ту же длину, что и столбец, в который я буду вставлять данные.

Например, у меня есть хранимая процедура для регистрации пользователя. Хранимая процедура имеет параметр @USERNAME с varchar(12) как тип. колонна USERNAME в USER таблица имеет тот же тип с этой длиной. В принципе это не проблема. Но я бы предпочел свободно менять USERNAME длина столбца без необходимости также изменять длину параметра хранимой процедуры.

Я не могу использовать табличные параметры, так как драйверы mssql php их не поддерживают.

Единственное решение, которое я могу себе представить, это просто использовать varchar (max) для параметров хранимой процедуры, но считается ли это плохой практикой?

5

Решение

Краткий ответ: да.

Что бы это значило, если бы кто-то передал имя пользователя длиной 2 147 483 647 символов !? Используя varchar (max), вы подразумеваете, что все будет в порядке.

Я согласен с комментарием @DanGuzman. Прежде всего, столбцы таблицы должны иметь соответствующий размер, а затем параметры и переменные должны иметь соответствующий размер. Если вам нужно изменить размер столбца таблицы, то вы должны распространить это изменение в другом месте — это лучший подход.

Однако правильно подобрать размер столбцов таблицы не всегда просто — как долго должно быть имя пользователя? 12 кажется коротким, 2 147 483 647 определенно слишком длинным — где-то посередине? 😉 @JohnCappelletti имеет и правильную точку — хранение и обработка обходятся дешевле, чем затраты на внесение изменений, поэтому при определении размера ошибайтесь.

Если varchar (max) — это плохо, и вы не хотите следовать передовым методам, есть ли середина? Может быть, использовать коэффициент 10? Что-то достаточно выше фактического размера, но не слишком.

Еще одна вещь, на которую следует обратить внимание, независимо от того, как вы измеряете параметры, — это обрезание без вывода сообщений или ошибки усечения во время выполнения — проверьте длины явно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]