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

时间:2015-03-03 16:27:56

标签: sql sql-server sql-server-2008

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

SELECT Quantity 
FROM myTable

我获得了这样的值: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

我收到错误

  

@DECIMAL_PLACES不是 INTEGER

可以这样做吗?

由于

2 个答案:

答案 0 :(得分:4)

你能使用动态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:
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'SELECT CONVERT(DECIMAL(10, ' + CAST(@DECIMAL_PLACES AS NVARCHAR(20)) + N'), Quantity) AS QuantityFormatted FROM myTable'
EXEC (@SQL)

但是,最好在客户端进行格式化。

答案 1 :(得分:1)

我发现了一个棘手的解决方案,以避免使用动态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

希望这对每个人都有用:)

感谢