我们有一个从应用程序调用的存储过程。 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
有关如何更改数据类型的任何想法?
答案 0 :(得分:0)
首先,您应该将SSN存储为字符串而不是数字,因为它们可以从0开始。
我认为你能做的最好的事情就是让结果值为NULL
SET @SSN_DEC = (case when isnumeric(@SubscriberSSN) = 1
then cast(@SubscriberSSN as decimal(9, 0))
end);