Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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 如何在存储过程中VARCHAR类型的输出变量出现零值条件时显示字符串_Sql_Sql Server - Fatal编程技术网

Sql 如何在存储过程中VARCHAR类型的输出变量出现零值条件时显示字符串

Sql 如何在存储过程中VARCHAR类型的输出变量出现零值条件时显示字符串,sql,sql-server,Sql,Sql Server,我正在用SQL Server编写一个存储过程 我必须通过我已经创建的临时表#SweepActivityTransactions INSERT INTO #SweepActivityTransactions (Difference) SELECT TOP 100 CASE WHEN (CAT.RequestedAmount - CAT.ConfirmedAmount) = 0 THEN @DIFFERENCEDECIMAL

我正在用SQL Server编写一个存储过程

我必须通过我已经创建的临时表
#SweepActivityTransactions

INSERT INTO #SweepActivityTransactions (Difference)
   SELECT TOP 100
      CASE
         WHEN (CAT.RequestedAmount - CAT.ConfirmedAmount) = 0
           THEN @DIFFERENCEDECIMAL
           ELSE (CAT.RequestedAmount - CAT.ConfirmedAmount) 
      END AS 'Difference'
   FROM 
      CustomerAccount_Transaction CAT WITH (NOLOCK)
   WHERE 
      EntryDate = @BusinessDate 
      AND CAT.TransactionExceptionType_FK = 0
END
根据上述条件,我必须在屏幕上显示一个连字符(-),以防差值为零,否则为差值

由于字段差异的类型为
varchar(18,2)
,因此我无法直接显示连字符(因为它是
varchar
类型)

我想用这个

SET @DIFFERENCEVARCHAR = '-'
SET @DIFFERENCEDECIMAL = (SELECT CAST(@DIFFERENCEVARCHAR AS decimal(18,2)) )
但即使这样也不起作用。如果
CAT.RequestedAmount-CAT.ConfirmedAmount
为零,是否有人能建议一种在屏幕上显示的方法

更新-样本数据-

如果((CAT.RequestedAmount-CAT.ConfirmedAmount)=0,则显示- 否则显示差异

    SCREEN 
    Difference
        -
      $3.45
      $6.77
        -
        -
      $2.33

您必须输出一个varchar:

 CASE
     WHEN (CAT.RequestedAmount - CAT.ConfirmedAmount) = 0
       THEN @DIFFERENCEVARCHAR
       ELSE '$'+CAST((CAT.RequestedAmount - CAT.ConfirmedAmount) AS varchar(31))
  END AS 'Difference'

SQL Server中没有
varchar(18,2)
数据类型-
varchar
只有一个长度(比如
varchar(18)
)-但没有像
decimal(18,2)
那样的“精度”我认为这是一种类型,OP的意思是
decimal(18,2)
。但是,问题仍然很不清楚。示例数据和所需的输出将很有帮助。您不能将“-”转换为十进制,但可以将十进制转换为varchar。但在正常情况下,如果值大于0,则输出需要采用此格式$2.55。varchar将不会使用$signIt进行格式化。无法完成。“-”可以不能以数值形式输出。并且输出列不能为“this为十进制,this为varchar,this为varchar”。必须为该列确定一种数据类型。不能将值NULL插入列'Difference',表'tempdb.dbo.#SweepActivityTransactions