2014-12-17 1 views
0

У нас есть хранимая процедура, которая получает вызов из приложения. Одним из входных данных для SP является SSN. Мы используем SQL Server 2008R2 Enterprise Edition.Условно изменение типа переменных данных на основе ввода

Тип данных SSN вводится как VARCHAR(9). Мы берем этот SSN и присоединяем его к таблице, у которой SSN хранится как DECIMAL(9,0). Это приводит к неявному преобразованию во время выполнения и влияет на производительность.

Мой первоначальный план состоял в том, чтобы вход входил как VARCHAR и просто скопировал переменную в другую переменную с типом данных DECIMAL, однако у нас есть излом в этом процессе. Пользователь может также вводить текст как «новый», когда есть новый клиент. Когда это произойдет, мы получим неспособность преобразовать тип данных varchar в десятичный.

Есть ли способ условно изменить тип данных переменной на основе ввода, который он получает?

Вот пример того, что я пытаюсь использовать сейчас, но безрезультатно, так как случаи, когда «новое» въезжают причиной ошибки преобразования:

CREATE PROCEDURE [dbo].[StoredProcedureFromApplication](
    @SubscriberSSN VARCHAR(9)) 
AS 
DECLARE @SSN_DEC DECIMAL(9,0) 
SET @SSN_DEC = @SubscriberSSN 

Любые идеи о том, как иметь тип данных, способный быть измененным?

ответ

0

Во-первых, вы должны хранить ПЛА как строки, а не числа, так как они могут начать с 0.

Я думаю, что лучшее, что вы можете сделать, это иметь результирующее значение будет NULL

SET @SSN_DEC = (case when isnumeric(@SubscriberSSN) = 1 
        then cast(@SubscriberSSN as decimal(9, 0)) 
       end); 
+0

Абсолютно согласен , к сожалению, как это обычно бывает, это было введено в действие задолго до того, как я занял здесь должность DBA, и мне нужно работать над тем, как приложение уже функционирует. –

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