基于集合的查询和t-sql中逐行查询之间的区别是什么?

时间:2014-07-05 08:21:01

标签: sql sql-server tsql

我对t-sql并不擅长,最近我听说过t-sql中基于集合的查询和逐行查询。我只是想提高我对t-sql的了解。我只是想知道差异,以及哪些查询设置基础,哪些是逐行,我很困惑。请任何人解释如果可能的例子将非常有帮助..谢谢。

1 个答案:

答案 0 :(得分:2)

我不确定,但我猜你正在谈论cursors

如果您使用基于集合的查询,请执行以下操作:

update t1 set f1 where f2 = "something"

您正在使用多组记录。

如果您使用游标,MS SQL Server将按记录分类记录:

DECLARE cursor1 CURSOR FOR 
SELECT *
FROM t
WHERE f2 = "something"

OPEN cursor1
FETCH NEXT FROM cursor1 INTO @v

IF @@FETCH_STATUS <> 0 
    PRINT '         <<None>>'     

WHILE @@FETCH_STATUS = 0
BEGIN

    -- do somethifg with current record

CLOSE cursor1
DEALLOCATE cursor1

如果可能,您应该使用基于集合的查询,因为它通常更快,MS SQL Server可以构建更好的执行计划。

但有时应用程序逻辑非常复杂,很难仅使用基于集合的查询来开发解决方案,在这种情况下您可以使用游标。