如果存在不打印SQL Server存储过程中的伪值

1 人不认可

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

SQL Server 2012

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

如果记录存在,会按预期返回

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

如果记录不存在--这就是问题所在。

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

希望的值。

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

如果记录不存在,它没有打印出伪列的值。我已经改变了列名并执行了,以确保它取的是正确的列,是的,它取的是正确的列,但却不能打印值。

1 个评论
试试 select NULL as id, NULL AS name, NULL salary, 'Oldemp' as status1, 0 as Code1; ,没有FROM子句,返回一个只有字面意义的单行结果集。如果需要的话,我可能还需要把 NULL 字面符号转换成需要的类型。
sql-server-2008
stored-procedures
sql-server-2012
user1620464
user1620464
发布于 2019-07-01
2 个回答
user1620464
user1620464
发布于 2019-07-01
已采纳
0 人赞同

我自己做的,但大感谢你的回答。

CREATE PROCEDURE test1
@Empid NVARCHAR(20)
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)
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)
Select * from #temp