在EXISTS语句中怎么老是提示我没有定义变量?

5drush 2002-12-15 11:12:37
明明定义了@tmp1的啊,怎么老是说我没有定义@tmp1呢?
以下是我的存储过程,请大侠帮忙看看,谢谢!

--说明:GetUserByDepartmentId
--作用:根据部门ID获取所有的用户
CREATE PROCEDURE GetUserByDepartmentId
@Department_Id INT
AS
SET NOCOUNT ON
DECLARE @tmp1 TABLE ( fid INT, fdepartment_id INT)
DECLARE @tmp2 TABLE ( fid INT, fdepartment_id INT)

INSERT @tmp1
SELECT fid,fdepartment
FROM tdepartment
WHERE fdepartment_id = @Department_Id

WHILE EXISTS(SELECT * FROM @tmp1 WHERE EXISTS(SELECT * FROM tdepartment WHERE fdepartment_id = @tmp1.fid))
BEGIN
INSERT @tmp2 SELECT a.* FROM tdepartment a, @tmp1 b WHERE a.fdepartment_id = b.fid

DELETE FROM @tmp1 WHERE EXISTS(SELECT * FROM tdepartment WHERE fdepartment_id = @tmp1.fid)

INSERT @tmp1 SELECT * from @tmp2

DELETE FROM @tmp2
END
SELECT * FROM tuser WHERE fdepartment_id IN (SELECT fid FROM @tmp1)
SET NOCOUNT OFF
GO
...全文
32 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tjackyren 2002-12-16
  • 打赏
  • 举报
回复
请问在db2里如何像sql server里那样定义变量?(declare @aaa int)我想在db2里完成像如下sql server 脚本的功能,在哪儿运行脚本?请问各位大侠帮忙看看(

如果解决问题了一定揭帖、给分,决不食言)

declare cur_emp scroll cursor for --定义游标

select NameCol from table2


open cur_emp --打开游标

declare @i int
select @i=0

while (@i<@@cursor_rows) --如果没有结束

begin
declare @TempName varchar(64)

fetch next from cur_emp into @TempName --操作游标数据
--print @TempName

UPDATE table2 SET NameCol ='x'+right(NameCol ,(len(NameCol)-1)) WHERE NameCol=@TempName --修改游标访问

的纪录

select @i=@i+1

end
CoolAbu 2002-12-16
  • 打赏
  • 举报
回复
不能直接用@tmp1的,必须用别名,j9988大师写的很清楚了,@tmp1后面的A就是别名
CCEO 2002-12-16
  • 打赏
  • 举报
回复
不能这样引用:@tmp1.fid,必须用别名。这是使用表变量应该注意的。
和exists没有关系。
j9988 2002-12-15
  • 打赏
  • 举报
回复
WHILE EXISTS(SELECT * FROM @tmp1 A WHERE EXISTS(SELECT * FROM tdepartment WHERE fdepartment_id = A.fid))

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧