Округление десятичного значения динамической переменной - PullRequest
0 голосов
/ 07 октября 2018

Мне нужно округлить значение столбца в таблице A на основе другого столбца в таблице B в функции SQL.

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, как показано ниже, оно показывает ошибку:

Неверный синтаксис рядом с'@currencyround'.

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

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Если вам нужны конкретные метаданные, вы можете использовать динамический 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);

Но лично я бы не писал такой код.Я бы лучше отформатировал число на прикладном уровне.

0 голосов
/ 07 октября 2018

Если вам нужно округлить значения, то как насчет этого:

ROUND(POS.BALANCE, @currencyround)
0 голосов
/ 07 октября 2018

Что ты не понимаешь?Определения типов не допускают переменных.Вы можете сделать это с помощью динамического SQL, но это выглядит как перебор.

Если вам важно, как выводится переменная, используйте str() или format(), чтобы создать нужный формат.

...