我有一個 EmployeeAudit 表,如下所示:
Id EmployeeId
1 100
2 101
我有一個 2 以下變數:
DECLARE @Version INT = 10;
DECLARE @isAuditDone BIT = 0;
//logic to populate Version and isAuditDone
基于上述變數,我想檢查審計是否完成,然后我想從 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
但我得到以下錯誤:
轉換 varchar 值 '.' 時轉換失敗 為資料型別 int。
有人可以幫忙嗎?
更新 :
執行 [dbo].[GetEmployeeAuditJson] @employeeId = 101
SP 回傳型別select statement:
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES;
uj5u.com熱心網友回復:
只是為了擴展亞倫的評論
您需要保持資料型別一致。在這種情況下,字串。
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
uj5u.com熱心網友回復:
如果要從存盤程序回傳整數值以外的值,則需要使用輸出列。因此,在您的情況下,您必須回傳字串,因為您有一個要附加數字的點。這是一個演示存盤程序定義,您可以嘗試使用它來滿足您的需求。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421783.html
標籤:
下一篇:新課程開始時的標簽
