Sql 如何根据某些条件更改游标的select语句?
有人知道如何为同一个游标设置不同的select语句吗?我需要这样的想法Sql 如何根据某些条件更改游标的select语句?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,有人知道如何为同一个游标设置不同的select语句吗?我需要这样的想法 DECLARE Temp_Cursor CURSOR FOR IF(@TempVar = 1) BEGIN SELECT CustomerId FROM Customers END ELSE IF(@TempVar = 2) BEGIN SELECT OrderId FROM Orders END OPEN Temp_Cursor; FETCH NEXT FROM TempCursor INTO @TempO
DECLARE Temp_Cursor CURSOR FOR
IF(@TempVar = 1)
BEGIN
SELECT CustomerId FROM Customers
END
ELSE IF(@TempVar = 2)
BEGIN
SELECT OrderId FROM Orders
END
OPEN Temp_Cursor;
FETCH NEXT FROM TempCursor INTO @TempObjectId
WHILE @@FETCH_STATUS = 0
BEGIN
。。。。等
我找到了解决方案:声明@Temp\u游标
IF@TempVar = 1
开始
设置@Temp\u Cursor=光标
从客户中选择CustomerId
终止
其他的IF@TempVar = 2
开始
设置@Temp\u Cursor=光标
从订单中选择OrderId
终止
打开@Temp_光标;
从@TempCursor获取下一个到@TempObjectId
而@@FETCH\u STATUS=0
开始完整的查询应该是动态的。这意味着执行计划将在运行时发布 范例 将IF置于外部,并执行两个不同的游标,每种情况一个 像这样:
IF(@TempVar = 1)
BEGIN
DECLARE Temp_Cursor CURSOR FOR
SELECT CustomerId FROM Customers
OPEN Temp_Cursor;
FETCH NEXT FROM TempCursor INTO @TempObjectId
WHILE @@FETCH_STATUS = 0
BEGIN
....
END
ELSE IF(@TempVar = 2)
BEGIN
DECLARE Temp_Cursor CURSOR FOR
SELECT OrderId FROM Orders
OPEN Temp_Cursor;
FETCH NEXT FROM TempCursor INTO @TempObjectId
WHILE @@FETCH_STATUS = 0
BEGIN
....
END
另一种可能是使用。或者您可以只使用动态SQL…我同意@MitchWheat+1。这也减少了代码行。@Kanavi-这是解决方案。我已经更新了我的问题。如果一个光标在CustomerID或OrderID上进行迭代,而它可能不知道它使用的是哪种类型的ID,那么它是如何有意义/有用的呢?@Radislav,我认为,你已经找到了解决方案,但方向是错误的
IF(@TempVar = 1)
BEGIN
DECLARE Temp_Cursor CURSOR FOR
SELECT CustomerId FROM Customers
OPEN Temp_Cursor;
FETCH NEXT FROM TempCursor INTO @TempObjectId
WHILE @@FETCH_STATUS = 0
BEGIN
....
END
ELSE IF(@TempVar = 2)
BEGIN
DECLARE Temp_Cursor CURSOR FOR
SELECT OrderId FROM Orders
OPEN Temp_Cursor;
FETCH NEXT FROM TempCursor INTO @TempObjectId
WHILE @@FETCH_STATUS = 0
BEGIN
....
END