Sql 如何使用if语句在存储过程中调用另一个过程
具有值的表用户:Sql 如何使用if语句在存储过程中调用另一个过程,sql,sql-server,Sql,Sql Server,具有值的表用户: FirstName LastName Age A A 20 B B 21 C C 22 D D 21 E E 20 然后我创建一个过程,在那个里需要检查年龄,然后在if语句中调用另一个过程 SELECT @firstName
FirstName LastName Age
A A 20
B B 21
C C 22
D D 21
E E 20
然后我创建一个过程,在那个里需要检查年龄,然后在if语句中调用另一个过程
SELECT @firstName = FirstName ,lastName = LastName ,@age = Age FROM dbo.users
if @age = 20
exec myProc1 'firstName','LastName'
if @age = 21
exec myProc2 'firstName','LastName'
if @age = 22
exec myProc3 'firstName','LastName'
当我调用这个过程时,if语句只取一行,然后调用if语句中的另一个过程,例如,只工作
if @age = 20
exec myProc1 'firstName','LastName'
因为Age=20是表中的第一行。我想检查表中的所有行,怎么做?可以不用光标吗?不用光标也可以。但它仍然使用循环
declare @t table as (id int identity(1, 1) primary key,
FirstName varchar(255),
LastName varchar(255),
Age int
);
insert into @t(FirstName, LastName, Age)
select FirstName, LastName, Age
from dbo.users;
declare @maxi int = (select max(id) from @t);
declare @i = 0, @FirstName varchar(255), @LastName varchar(255), @Age int;
while @i <= maxi
begin
select @FirstName = FirstName, @LastName = LastName, @Age = age
from @t
where id = @i;
if @age = 20
exec myProc1 @firstname, @LastName;
if @age = 21
exec myProc2 @firstname, @LastName;
if @age = 22
exec myProc3 @firstname, @LastName;
set @i = @i + 1;
end;
有几件事。首先,您并不真正需要临时表。它便于获取循环计数器。其次,我还假设您希望变量作为三个存储过程的参数,而不是常量字符串。创建一个表变量:
DECLARE @List TABLE(Id int IDENTITY(1,1), FirstName nVarchar(Max), LastName nVarchar(Max), Age INT)
然后插入表中变量的所有数据
用户也可以在此处使用案例陈述,而不是“如果上一个问题对您有帮助吗?”。这两个看起来都像姐妹。您的第二个存储过程是做什么的?也许可以将其更改为表值函数?所有过程都会向不同的用户发送邮件people@GeoVIP没有光标,我错过了那一行。删除了答案,抱歉…@GeoVIP:刚刚删除了一个答案,请让我知道它是否适合您。谢谢您的回答,这个循环将比光标快进更快?@GeoVIP。您需要对其进行测试才能找到答案。游标有一定的开销。我的猜测是,这可能会稍微快一点,但差别不会太大。@GordonLinoff i的用途是什么。在where条件下,写where i=@i;但我想应该是id=@i。你的回答很好,但我认为完成这项任务的最好方法是光标。@ABVyas。那是个打字错误。
INSERT INTO @List (FirstName,LastName,Age)(SELECT FirstName, LastName, Age FROM YourTable)
DECLARE @intNumberOfRecords int, @intRowCount int, @FirstName nVarchar(Max), @LastName nVarchar(Max), @Age int
SET @intNumberOfRecords = @@ROWCOUNT
SET @intRowCount = 1
WHILE @intRowCount <= @intNumberOfRecords
BEGIN
select @FirstName = FirstName, @LastName = LastName, @Age = age
from YourTable Where Id = @intRowCount
if @Age = 20
exec myProc1 @firstname, @LastName;
if @Age = 21
exec myProc2 @firstname, @LastName;
if @Age = 22
exec myProc3 @firstname, @LastName;
SET @intRowCount = @intRowCount + 1;
END