Я получаю несколько аргументов в хранимую процедуру. Это аргументы NVARCHAR.
У меня проблема, когда мне нужно передать некоторые из этих значений в FLOATS, потому что они принимаются, например, как
@ VALUE1 NVARCHAR (100)
ОБЪЯВИТЬ @ChangedValue НАБОР @ChangedValue = CAST (@ Value1 AS FLOAT)
Например. @ Value1 = "0,001"
Дает мне проблему, так как ожидает "0,001"
Я не могу изменить формат ввода, но могу ли я как-то изменить его на стороне SQL-сервера? Заменив все "," на "." вместо?
С уважением, Кенн





Вы можете использовать @VALUE1 = REPLACE(@VALUE1, ',', '.')
Хотя это действительно кажется ужасным поступком!
Как сказал Митч, это звучит не очень хорошо, и было бы намного лучше, если бы предоставленный параметр имел тип float в первую очередь. Он дал вам решение, которое решает вашу проблему на данный момент, но, как он указал, у вас могут возникнуть проблемы в будущем.
Я предполагаю, что процедура вызывается каким-то кодом приложения, и подозреваю, что эти числа вводятся пользователем. Если это так, то преобразование должно происходить на уровне приложения, так как это позаботится о настройках локали, и это единственное место, которое имеет контроль над форматом пользовательского ввода.
Я не знаком с вашими данными, но убедитесь, что у вас нет значений, допустимых с запятой, например 1000. Изменение этого значения на 1.000 с помощью замены резко меняет фактическое число.
Я бы исправил пользовательский интерфейс, чтобы недопустимые числа не могли быть помещены в поле. Я бы также наложил ограничение на таблицу в базе данных, которая требует, чтобы число находилось в определенном диапазоне или действительное число после очистки данных. Таким образом, плохие данные не могут попасть в поле с самого начала.