2016-05-29 33 views
5

Mam stosunkowo prostą stronę internetową, która używa php + mssql. Mam różne procedury składowane, które wykonują proste operacje wstawiania i usuwania. Problem, przed którym stoję, polega na tym, że wiele parametrów, które przechodzę do procedury przechowywanej, ma tę samą długość, co kolumna, którą wstawię dane.Procedura przechowywana na serwerze sql Użyj varchar max jako parametru

Na przykład mam procedurę przechowywaną, aby zarejestrować użytkownika. Procedura składowana ma parametr @USERNAME z varchar(12) jako typ. kolumna USERNAME w tabeli ma ten sam typ o tej długości. Zasadniczo nie stanowi to problemu. Ale wolałbym móc dowolnie zmieniać długość kolumny USERNAME, bez konieczności zmiany długości parametru procedury składowanej.

Nie mogę używać parametrów wycenianych w tabeli, ponieważ sterowniki mssql php nie obsługują ich.

Jedyne rozwiązanie, jakie mogę sobie wyobrazić, to użycie varchar (max) dla parametrów procedury składowanej, ale czy jest to uważane za złą praktykę?

+1

Moim zdaniem parametry procedury składowanej powinny odzwierciedlać typ kolumny bazowej. Pozwoli to uniknąć błędów czasu obcięcia w czasie wykonywania i zapewni samokonujący interfejs procedur przechowywanych. –

+0

IMHO, nie bądźcie tak restrykcyjni przy długościach pól. Miejsce na dysku jest tanie, a SQL Server jest szybki, a najważniejsze ... rzeczy zmieniają się –

+1

albo użyj parametrów sql zasobów IMO lepiej dla kontroli wersji, albo utwórz UDT dla każdego pola w bazie danych. wtedy musisz tylko zmienić tam definicje, aby wpłynąć zarówno na tabelę, jak i na przechowywane proc – Mark

Odpowiedz

0

Krótka odpowiedź: tak.

Co by to było, gdyby ktoś przeszedł w nazwę użytkownika, która miała 2 147 483 647 znaków !? Używając varchar (max) sugerujesz, że byłoby dobrze.

Zgadzam się z komentarzem @DanGuzman. Kolumny tabel powinny być najpierw odpowiednio wymiarowane, a następnie parametry i zmienne powinny być odpowiednio dobrane. Jeśli musisz zmienić rozmiar kolumny tabeli, musisz propagować tę zmianę w innym miejscu - jest to najlepsze podejście.

Właściwe dobieranie kolumn tabeli nie zawsze jest łatwe - jak długo powinna istnieć nazwa użytkownika? 12 wydaje mi się krótka, 2147483647 zdecydowanie za długi - gdzieś pomiędzy? ;) @JohnCappelletti ma również ważny punkt - przechowywanie i przetwarzanie jest tanie w porównaniu do kosztów zmiany, więc błędnie po wielkiej stronie, gdy rozmiar.

Jeśli varchar (max) jest zły, a nie chcesz przestrzegać najlepszych praktyk, czy istnieje jakieś pośrednie podłoże? Może użyć współczynnika 10? Coś wystarczająco ponad rzeczywisty rozmiar, ale nie nadmiernie tak.

Kolejną rzeczą, na którą należy zwrócić uwagę, bez względu na to, jak zmieniasz parametry, jest ciche skracanie lub błędy skracania w czasie wykonywania - należy wyraźnie sprawdzić długości.