Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用动态变量舍入十进制值_Sql_Sql Server_Sql Function - Fatal编程技术网

Sql 使用动态变量舍入十进制值

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

我需要根据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 
    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)

可能您必须将其创建为文字字符串,然后?您是想简单地显示结果,还是想稍后在另一个查询中使用正好两位数的结果?可能您必须将其创建为文字字符串,然后?您是想简单地显示结果,还是只显示正好两位数的结果,以后再使用,也许在另一个查询中?