Sql 根据输入有条件地更改变量数据类型
我们有一个从应用程序获取调用的存储过程。SP的一个输入是SSN。我们使用的是SQLServer2008R2企业版 SSN数据类型输入为Sql 根据输入有条件地更改变量数据类型,sql,variables,sql-server-2008-r2,type-conversion,Sql,Variables,Sql Server 2008 R2,Type Conversion,我们有一个从应用程序获取调用的存储过程。SP的一个输入是SSN。我们使用的是SQLServer2008R2企业版 SSN数据类型输入为VARCHAR(9)。我们获取该SSN并将其连接到一个表,该表将SSN存储为十进制(9,0)。这会在执行时导致隐式转换,并影响性能 我最初的计划是让输入以VARCHAR的形式输入,然后用DECIMAL数据类型将变量复制到另一个变量上。然而,我们在这个过程中遇到了一个难题。当有新的客户端时,用户还可以输入“新”文本。发生这种情况时,我们得到一个无法将数据类型varc
VARCHAR(9)
。我们获取该SSN并将其连接到一个表,该表将SSN存储为十进制(9,0)
。这会在执行时导致隐式转换,并影响性能
我最初的计划是让输入以VARCHAR
的形式输入,然后用DECIMAL
数据类型将变量复制到另一个变量上。然而,我们在这个过程中遇到了一个难题。当有新的客户端时,用户还可以输入“新”文本。发生这种情况时,我们得到一个无法将数据类型varchar转换为decimal的错误消息
有没有办法根据收到的输入有条件地更改变量的数据类型
下面是一个我现在尝试使用的示例,但没有用,因为输入“new”的实例会导致转换错误:
CREATE PROCEDURE [dbo].[StoredProcedureFromApplication](
@SubscriberSSN VARCHAR(9))
AS
DECLARE @SSN_DEC DECIMAL(9,0)
SET @SSN_DEC = @SubscriberSSN
关于如何更改数据类型,您有什么想法吗?首先,您应该将SSN存储为字符串而不是数字,因为它们可以以0开头 我认为最好的方法是将结果值设置为
NULL
SET @SSN_DEC = (case when isnumeric(@SubscriberSSN) = 1
then cast(@SubscriberSSN as decimal(9, 0))
end);
我完全同意,不幸的是,正如通常所说的那样,这在我担任DBA之前很久就已经实施了,我必须解决应用程序如何运行的问题。