如果存在则不在 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
我在我的存储过程中使用了一个简单的 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