【问题标题】:Conditionally changing a variable data type based on input根据输入有条件地更改变量数据类型
【发布时间】:2014-12-17 16:58:52
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 完全同意,不幸的是,正如往常一样,这是在我担任 DBA 之前很久就已经实施的,我必须解决应用程序已经运行的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 2020-01-02
    • 2018-10-20
    • 2018-05-14
    • 2012-11-12
    • 1970-01-01
    • 2017-06-28
    • 2019-04-01
    相关资源
    最近更新 更多