根据输入有条件地更改可变数据类型

时间:2014-12-17 16:58:52

标签: sql variables sql-server-2008-r2 type-conversion

我们有一个从应用程序调用的存储过程。 SP的输入之一是SSN。我们使用的是SQL Server 2008R2企业版。

SSN数据类型输入为VARCHAR(9)。我们将SSN加入到将SSN存储为DECIMAL(9,0)的表中。这会在执行时导致隐式转换并影响性能。

我最初的计划是将输入作为VARCHAR输入,然后将变量复制到具有DECIMAL数据类型的另一个变量,但是,我们在此过程中有一个问题。当有新客户端时,用户还可以将文本输入为“新”。发生这种情况时,我们无法将数据类型varchar转换为十进制。

有没有办法根据收到的输入有条件地更改变量的数据类型?

以下是我现在尝试使用的示例,但无效,因为输入“new”的实例会导致转换错误:

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

有关如何更改数据类型的任何想法?

1 个答案:

答案 0 :(得分:0)

首先,您应该将SSN存储为字符串而不是数字,因为它们可以从0开始。

我认为你能做的最好的事情就是让结果值为NULL

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