Если существует, не печатает псевдо значения в хранимой процедуре SQL Server. - PullRequest
0 голосов
/ 01 июля 2019

Я использую простой оператор if exists в моей хранимой процедуре, но при выводе он не печатает значения псевдостолбца, если записи не существуют.

SQL Server 2012

CREATE PROCEDURE test1
    @Empid NVARCHAR(20)
AS
BEGIN
    IF EXISTS (SELECT TOP 1 * FROM employees WHERE id = @Empid)
    BEGIN
        SELECT id, name, salary, 'Newemp' AS status, 1 AS Code 
        FROM employees
    END

    IF NOT EXISTS (SELECT TOP 1 * FROM employees WHERE id = @Empid)
    BEGIN
        SELECT id, name, salary, 'Oldemp' AS status1, 0 AS Code1 
        FROM employees
    END
END

Результат:

Если запись существует, она возвращается как положено

ID  Name Salary Status Code
-------------------------------
123 kkr  1000   Newemp  1

Если запись не существует - это проблема:

Id Name Salary Status1 Code1 
-----------------------------

Желаемое значение:

ID Name Salary Status1 Code1
----------------------------
               Oldemp  0

Если записи не существуют, они не печатают значения псевдостолбцов. Я изменил имена столбцов и выполнил, чтобы убедиться, что он принимает правильные столбцы, и да, он принимает правильные, но не может печатать значения.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Я сделал это сам, но большое спасибо за ваши ответы.

CREATE PROCEDURE test1
@Empid NVARCHAR(20)
AS
BEGIN
Create #temp
(Id Nvarchar(100),
 Name Nvarchar(100),
Salary Nvarchar(100),
Status Nvarchar(100),
Code Nvarchar(100)
)

IF EXISTS (SELECT TOP 1 * FROM employees WHERE id = @Empid)
BEGIN
 insert into #temp (id, name, salary)
   values  (SELECT id, name, salary 
    FROM employees  WHERE id = @Empid)
Insert into # temp (Status , Code)
           ('Newemp', 1)
END

IF NOT EXISTS (SELECT TOP 1 * FROM employees WHERE id = @Empid)
BEGIN
    insert into #temp (id, name, salary)
   values  (SELECT id, name, salary 
    FROM employees  WHERE id = @Empid)
Insert into # temp (Status , Code)
           ('Oldemp', 0)
END

Select * from #temp
END
0 голосов
/ 01 июля 2019

Эти запросы основаны на количестве записей в employees - это может быть один, это может быть ни один, и это может быть много. Если вы всегда хотите получить одну строку, вы можете опустить предложение from и просто выбрать литералы:

SELECT NULL AS id, NULL AS name, NULL AS salary, 'Oldemp' ASs status1, 0 AS Code1
...