2016-05-29 2 views
5

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

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

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

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

+1

На мой взгляд, параметры хранимой процедуры должны отражать базовый тип столбца. Это позволит избежать ошибок усечения во время выполнения и обеспечить самодокументированный интерфейс хранимых процедур. –

+0

IMHO, не следует ограничивать длину поля. Дисковое пространство дешево, а SQL Server - это очень быстро, и самое главное ... все меняется –

+1

либо использует параметр sql resources IMO лучше для управления версиями, либо создает UDT для каждого поля в вашей базе данных. то вам нужно только изменить там определения, чтобы влиять как на таблицу, так и на хранимые procs – Mark

ответ

0

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

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

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

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

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

Другая вещь, на которую следует обратить внимание, независимо от того, как вы оцениваете параметры, - это усечение без усечения или усечение времени выполнения - явно проверить длины.

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