【问题标题】:Converting nvarchar to numeric将 nvarchar 转换为数字
【发布时间】:2015-11-17 12:26:06
【问题描述】:

我有一个名为 @prmclientcode 的变量,它是 nvarchar。此变量的输入可以是单个客户端代码或多个客户端代码,以逗号分隔。例如

@prmclientcode='1'
or
@prmclientcode='1,2,3'.

我将此变量与表中的客户端代码列进行比较。此列的数据类型为 numeric(6,0)。我尝试像下面这样转换变量数据类型

SNCA_CLIENT_CODE IN ('''+convert(numeric(6,0),@prmclientcode+''')) (The query is inside a dynamic sql). 

但是当我尝试执行这个时,我得到了错误

将 nvarchar 转换为数字数据类型时出现算术溢出错误。

谁能帮帮我!

谢谢!

【问题讨论】:

  • 试试这个:声明 var nvarchar(500) SET var = '1,2,3' exec (N'select * from yortable where column in ('+ @var +')

标签: sql-server sql-server-2012 type-conversion


【解决方案1】:

使用以下代码来分隔变量:

DECLARE 
    @T VARCHAR(100) = '1,2,3,23,342',
    @I int = 1

;WITH x(I, num) AS (
    SELECT 1, CHARINDEX(',',@T,@I)

    UNION ALL

    SELECT num+1,CHARINDEX(',',@T,num+1) 
    FROM x
    WHERE num+1<LEN(@T)
        AND num<>0
)

SELECT SUBSTRING(@T,I,CASE WHEN num=0 THEN LEN(@T)+1 ELSE num END -I)
FROM x

【讨论】:

    【解决方案2】:

    请尝试以下代码 sn-p。

    DECLARE @ProductTotals TABLE
    (
      ProductID int
    )
    
    INSERT INTO @ProductTotals VALUES(1)
    INSERT INTO @ProductTotals VALUES(11)
    INSERT INTO @ProductTotals VALUES(3)
    
    DECLARE @prmclientcode VARCHAR(MAX)='1'
    
    
    SELECT * FROM @ProductTotals
    
    SELECT * FROM @ProductTotals WHERE  CHARINDEX(',' + CAST(ProductID AS VARCHAR(MAX)) + ',' , ',' + ISNULL(@prmclientcode,ProductID) + ',') > 0
    

    如果有任何问题,请告诉我。

    【讨论】:

      【解决方案3】:

      您需要将 numeric(6,0) 列转换为 nvarchar 数据类型。在处理之前,您可以使用以下脚本将其转换为 nvarchar:

       SNCA_CLIENT_CODE IN ('''+convert(cast( numeric(6,0) as nvarchar(max) ),@prmclientcode+'''))
      

      【讨论】:

        【解决方案4】:

        使用可以使用表函数或动态sql查询,这两个选项都可以。

        如果您需要更多帮助,请告诉我

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-22
          • 2012-10-18
          • 2013-04-07
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多