SQL Server 使用变量来定义小数位

ghi*_*boz 2 sql sql-server sql-server-2008

我有这个问题:我有一个名为的列,如果我执行此查询Quantity,则声明为DECIMAL(10, 2)

SELECT Quantity 
FROM myTable
Run Code Online (Sandbox Code Playgroud)

我获得了这样的值: 123.00

我有另一个表来存储我的配置内容,其中一个是小数位,我希望用它来转换列。

但是这个查询不起作用:

DECLARE @DECIMAL_PLACES INTEGER

SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT) 
FROM dtConfig 
WHERE sConfig = 'DecimalPlaces'

-- @DECIMAL_PLACES have a value of 1 for example:
SELECT 
    CONVERT(DECIMAL(10, @DECIMAL_PLACES), Quantity) AS QuantityFormatted
FROM 
    myTable
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

@DECIMAL_PLACES不是整数

有可能这样做吗?

谢谢

ghi*_*boz 5

我找到了一个棘手的解决方案,以避免使用动态 SQL:

DECLARE @DECIMAL_PLACES INTEGER

SELECT @DECIMAL_PLACES = CAST(sConfigValue AS INT) 
FROM dtConfig 
WHERE sConfig = 'DecimalPlaces'

-- @DECIMAL_PLACES have a value of 1 for example:
SELECT 
    LTRIM(STR(ROUND(Quantity, @DECIMAL_PLACES), 10, @DECIMAL_PLACES)) AS QuantityFormatted
FROM 
    myTable
Run Code Online (Sandbox Code Playgroud)

希望这对大家有用:)

谢谢