Mam tabelę EmployeeAudit jak poniżej:
Id EmployeeId
1 100
2 101
Mam 2 zmienną poniżej:
DECLARE @Version INT = 10;
DECLARE @isAuditDone BIT = 0;
//logic to populate Version and isAuditDone
W oparciu o powyższą zmienną chcę sprawdzić, czy Audyt został wykonany, a następnie zwrócić Id z EmployeeAudit jak poniżej:
if @isAuditDone
return Id + '.' + Version = 1.10
else
return Id
Pytanie:
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
Ale otrzymuję poniżej błąd:
Konwersja nie powiodła się podczas konwertowania wartości varchar „.” na typ danych int.
Czy ktoś może pomóc?
Aktualizacja :
EXEC [dbo].[GetEmployeeAuditJson] @employeeId = 101
Typ zwrotu SP w dniu select statement
:
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER, INCLUDE_NULL_VALUES;
2 odpowiedzi
Wystarczy rozwinąć komentarz Aarona
Musisz zachować spójność typu danych. W tym przypadku stringi.
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
Jeśli chcesz zwrócić coś innego niż wartość całkowitą z procedury składowanej, musisz użyć kolumny Output. Więc w twoim przypadku musisz zwrócić String, ponieważ masz kropkę, do której należy dołączyć numer. Jest to demonstracyjna definicja procedury składowanej, której możesz użyć, aby spełnić swoje oczekiwania.
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
Następnie możesz wykonać swój przechowywany proces w ten sposób z parametrem wyjściowym.
Declare @Id varchar(500)
EXEC SProc @Id OUTPUT
Podobne pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.
int
. Równieżreturn Id + '.' + Version = 1.10
nie płynie. WypróbujSELECT CONCAT(Id, '.', @Version);
return
, nigdy nie będziesz w staniereturn
ciągu z procedury składowanej.CONCAT
ignoruje typy, więc powinien pozwolić ci zbudować ciąg bez zajmowania się błędami konwersji. Przykład. Ale będziesz musiał użyć parametruSELECT
lubOUTPUT
, ponieważ procedura składowana nie możereturn
wartości takiej jak5.1.10
.