Asc*_*ian 7 sql t-sql sql-server cursor
我在数据库中有一个父子关系.我需要做的是遍历父查询,并使用父的主键,得到它的孩子.我遇到的问题是我需要使用参数化游标(传入密钥)来执行此操作.
在SQL Server中是否有这样的东西或模仿这个?我试过这样做,但它不起作用:
DECLARE @value VARCHAR(20);
DECLARE @someKey NUMERIC(19,0);
DECLARE main_curs
CURSOR FOR SELECT value FROM someTable where key = @someKey;
SET @someKey = 12345;
OPEN main_curs
FETCH NEXT FROM main_curs INTO @value;
CLOSE main_curs
DEALLOCATE main_curs
Run Code Online (Sandbox Code Playgroud)
但似乎它没有接我设置@someKey.
任何有关这方面的帮助将不胜感激.谢谢!
UPDATE
我应该包含更多信息,因为我让这个例子看起来太简单了.我有多个需要使用的@someKey值.如前所述,我有亲子关系,最多可以有6个孩子.所以我得到一个父母列表,它是各自的列,并迭代它.在WHILE-LOOP中,我想从父级获取主键并调用另一个游标来获取子信息(返回不同的列).所以我会对子游标进行多次调用,并设置不同的@someKey值.希望有道理.
你需要的是2个游标 - 一个用于父项,一个用于子项.确保子游标在LOOP内是DECLARED而不是在外面.如果你在外面声明,它将不起作用.
例如:
DECLARE @value VARCHAR(20);
DECLARE @someKey NUMERIC(19,0);
DECLARE main_curs
CURSOR FOR SELECT value FROM someTable where key = @someKey;
SET @someKey = 12345;
OPEN main_curs
FETCH NEXT FROM main_curs INTO @value;
while @@FETCH_STATUS = 0
BEGIN
DECLARE CHILD_CURS CURSOR FOR SELECT VALUE2 FROM CHILDTABLE WHERE value=@value;
open child_curs
fetch next from child_curs into @x,@y
close child_curs
deallocate child_curs
FETCH NEXT FROM main_curs INTO @value;
END
CLOSE main_curs
DEALLOCATE main_curs
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36200 次 |
最近记录: |