代码之家  ›  专栏  ›  技术社区  ›  Techy

用动态变量舍入十进制值

  •  1
  • Techy  · 技术社区  · 6 年前

    DECLARE @currencyround INT
    
    SELECT @currencyround = ISNULL(currencyround, 2) 
    FROM dbo.PRTL_currencySettings
    

    当我把价值 @currencyround

    SELECT
        CAST(POS.BALANCE AS DECIMAL(18, 2)) AS DBAmount
    FROM 
        dbo.POS_SALES POS
    

    当我把价值 如下所示,它显示错误:

    “@currencyround”附近的语法不正确。

    SELECT
        CAST(POS.BALANCE AS DECIMAL(18, @currencyround)) AS DBAmount
    FROM 
        dbo.POS_SALES POS  
    
    3 回复  |  直到 6 年前
        1
  •  4
  •   Morten    6 年前

    如果需要特定的元数据,可以使用动态SQL:

    DECLARE @currencyround int;
    SELECT @currencyround=ISNULL(currencyround,2) FROM dbo.PRTL_currencySettings;
    
    DECLARE @sql NVARCHAR(MAX) = 
    N'select CAST(POS.BALANCE AS DECIMAL(18,<currencyround>)) AS DBAmount
    FROM dbo.POS_SALES POS';
    
    SET @sql = REPLACE(@sql, '<currencyround>', @currencyround);
    
    EXEC(@sql);
    

        2
  •  4
  •   Gordon Linoff    6 年前

    你不明白什么?类型定义不允许变量。您可以使用动态SQL来实现这一点,但这似乎有些过头了。

    str() format() 创建所需的格式。

        3
  •  1
  •   Wolfgang Kais    6 年前

    ROUND(POS.BALANCE, @currencyround)