如何使用 T-SQL 使用点连接 2 个数字?

How to concatenate 2 numbers using dot using T-SQL?

我有一个 EmployeeAudit table,如下所示:

Id      EmployeeId      
1       100
2       101

我有一个 2 下面的变量:

DECLARE @Version INT = 10;
DECLARE @isAuditDone BIT = 0;
//logic to populate Version and isAuditDone

基于上述变量,我想检查审计是否完成,然后我想 return 来自 EmployeeAudit 的 ID,如下所示:

if @isAuditDone
    return Id + '.' + Version = 1.10
else 
    return Id

查询:

select 
    (CASE
          WHEN @isAuditDone = 1
                THEN E.Id + '.' + @Version
          WHEN @isAuditDone = 0
                THEN E.Id
          ELSE 
                E.Id
          END) AS Id, 
          EmployeeId
    from 
    EmployeeAudit E

但我遇到以下错误:

Conversion failed when converting the varchar value '.' to data type int.

有人可以帮忙吗?

更新:

EXEC [dbo].[GetEmployeeAuditJson] @employeeId = 101

SP return 输入 select statement:

FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES;

只是为了扩展 Aaron 的评论

您需要保持数据类型一致。在本例中为字符串。

select 
    (CASE
          WHEN @isAuditDone = 1
                THEN concat(E.Id,'.',@Version)
          WHEN @isAuditDone = 0
                THEN concat('',E.Id)  -- Notice INT to string 
          ELSE 
                concat('',E.Id)       -- Notice INT to string 
          END) AS Id, 
          EmployeeId
    from 
    EmployeeAudit E

如果您想 return 存储过程中的整数值以外的值,则需要使用输出列。 所以在你的情况下你必须 return String 因为你有一个点来附加数字。 这是一个演示存储过程定义,您可以尝试使用它来满足您的需求。

CREATE PROCEDURE  SProc
@Id varchar(500) OUTPUT
AS 
select 
    (CASE
          WHEN @isAuditDone = 1
                THEN concat(E.Id,'.',@Version)
          WHEN @isAuditDone = 0
                THEN concat('',E.Id)   
          ELSE 
                concat('',E.Id)       
          END) AS Id, 
          EmployeeId
    from 
    EmployeeAudit E

然后您可以像这样使用输出参数执行存储过程。

Declare @Id varchar(500)
EXEC SProc  @Id  OUTPUT