Mam skrypt, który stworzyłem dla naszej linii produkcyjnej, w której użytkownik wprowadza pewne zmienne do skryptu przed wykonaniem. Problem polega na tym, że zmienne to NVARCHAR (9), a jeśli użytkownik wprowadzi 10 żądań znakowych, ostatni znak zostanie odcięty (zgodnie z oczekiwaniami), co chcę wiedzieć, w jaki sposób mogę spowodować, że SQL zgłosi błąd, jeśli wprowadzi wartość, która jest zbyt długi? Ten problem wynika z tego, że użytkownicy palą swoje wkłady. Przykład:Jak wymusić szerokość wejściową nvarchar w SQL Server?
Valid input -
DECLARE @ClientCode NVARCHAR(9)
SET @ClientCode = N'ABCDEFGHI'
SELECT @ClientCode
Results
ABCDEFGHI
Invalid input -
DECLARE @ClientCode NVARCHAR(9)
SET @ClientCode = 'ABCDDEFGHI'
SELECT @ClientCode
Results
ABCDDEFGH
Co mam nadzieję na to ustawienie, które będą miały SSMS zgłosi błąd. Co mam nadzieję, w celu uniknięcia jest coś takiego -
DECLARE @ClientCode NVARCHAR(50)
...
IF LEN(@ClientCode) > 9
RAISERROR('Too long dummy.',16,1)
Dzięki Ci pomóc
Myślę, że powinieneś umieścić tę stronę sprawdzania poprawności po stronie klienta, zamiast w bazie danych ... nie musisz wykonywać podróży w obie strony do bazy danych tylko po to, aby poinformować użytkownika, że dane wejściowe były zbyt długie. Co więcej, nie pozwól im nawet wprowadzić zbyt długiego ciągu znaków. –
Zgadzam się z tobą. Jednak nie jest to opcja w systemie, nad którym pracuję. Te skrypty są uruchamiane przez bardzo techników JR z SSMS. Więc nie ma strony klienta. Ten skrypt służy do tworzenia rzeczy po stronie klienta. Moim rozwiązaniem byłoby wypalenie wszystkich tych skryptów za pomocą interfejsu sieciowego, z którego technicy mogą się logować, wprowadzić swoje parametry do formularza internetowego, a następnie kliknąć "idź". Niestety kierownictwo chce zachować status quo: "Robimy to w ten sposób od lat Nie rozumiem, dlaczego powinniśmy wydawać pieniądze, aby zrobić to we właściwy sposób" ... –