Sql 使用动态变量舍入十进制值
我需要根据SQL函数中表B中的另一列对表a中的一列的值进行舍入Sql 使用动态变量舍入十进制值,sql,sql-server,sql-function,Sql,Sql Server,Sql Function,我需要根据SQL函数中表B中的另一列对表a中的一列的值进行舍入 DECLARE @currencyround INT SELECT @currencyround = ISNULL(currencyround, 2) FROM dbo.PRTL_currencySettings 当我将@currencyround的值直接放入查询中时,如下所示,它工作正常: SELECT CAST(POS.BALANCE AS DECIMAL(18, 2)) AS DBAmount FROM
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”附近的语法不正确
你不明白什么?类型定义不允许变量。您可以使用动态SQL来实现这一点,但这似乎有些过头了
如果您关心变量的输出方式,请使用
str()
或format()
创建所需的格式。您不了解什么?类型定义不允许变量。您可以使用动态SQL来实现这一点,但这似乎有些过头了
如果您关心变量的输出方式,请使用
str()
或format()
创建所需的格式。如果您需要特定的元数据,可以使用动态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);
DECLARE@currencyround int;
从dbo.PRTL\u currencySettings中选择@currencyround=ISNULL(currencyround,2);
声明@sql NVARCHAR(最大值)=
N'选择铸造(位置平衡为十进制(18,))作为DBAmount
来自dbo.POS_SALES POS';
设置@sql=REPLACE(@sql,,@currencyround);
EXEC(@sql);
但就我个人而言,我不会写这样的代码。我宁愿在应用程序层设置数字格式。如果需要特定元数据,可以使用动态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);
DECLARE@currencyround int;
从dbo.PRTL\u currencySettings中选择@currencyround=ISNULL(currencyround,2);
声明@sql NVARCHAR(最大值)=
N'选择铸造(位置平衡为十进制(18,))作为DBAmount
来自dbo.POS_SALES POS';
设置@sql=REPLACE(@sql,,@currencyround);
EXEC(@sql);
但就我个人而言,我不会写这样的代码。我宁愿在应用程序层中设置数字的格式。如果需要对值进行四舍五入,那么这样如何:
ROUND(POS.BALANCE, @currencyround)
如果需要对这些值进行四舍五入,那么这样如何:
ROUND(POS.BALANCE, @currencyround)
可能您必须将其创建为文字字符串,然后?您是想简单地显示结果,还是想稍后在另一个查询中使用正好两位数的结果?可能您必须将其创建为文字字符串,然后?您是想简单地显示结果,还是只显示正好两位数的结果,以后再使用,也许在另一个查询中?