如果存在则不在 SQL 服务器存储过程中打印伪值

If exists is not printing pseudo values in SQL Server stored procedure

我在我的存储过程中使用了一个简单的 if exists 语句,但如果记录不存在,它在输出中不会打印伪列值。

SQL 服务器 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

如果记录不存在,则不会打印伪列值。我已经更改了列名并执行以确保它采用了正确的列,是的,它采用了正确的列,但未能打印值。

请帮忙!

这些查询基于 employees 中的记录数 - 可能是一个,可能是 none,也可能是很多。如果你总是想得到一行,你可以省略 from 子句而只是 select 文字:

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

我自己做的,非常感谢您的回答。

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