SQL - 为每条记录调用存储过程

标签 sql sql-server tsql

我正在寻找一种方法来为 select 语句的每条记录调用存储过程。

SELECT @SomeIds = (
    SELECT spro.Id 
    FROM SomeTable as spro
    INNER JOIN [Address] addr ON addr.Id = spro.Id 
    INNER JOIN City cty ON cty.CityId = addr.CityId
    WHERE cty.CityId = @CityId
)


WHILE @SomeIds  IS NOT NULL
BEGIN
    EXEC UpdateComputedFullText @SomeIds
END

上面的这样的事情当然是行不通的,但是有没有办法做到这样的事情呢?

最佳答案

您需要使用光标。

DECLARE @oneid int -- or the appropriate type

DECLARE the_cursor CURSOR FAST_FORWARD
FOR SELECT spro.Id  
    FROM SomeTable as spro 
        INNER JOIN [Address] addr ON addr.Id = spro.Id  
        INNER JOIN City cty ON cty.CityId = addr.CityId 
    WHERE cty.CityId = @CityId

OPEN the_cursor
FETCH NEXT FROM the_cursor INTO @oneid

WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC UpdateComputedFullText @oneid

    FETCH NEXT FROM the_cursor INTO @oneid
END

CLOSE the_cursor
DEALLOCATE the_cursor

关于SQL - 为每条记录调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2077948/

相关文章:

mysql - 使用 'reservation' 分两步移动存储在数据库表中的信息资源

sql - SQLite 3中空表的奇怪外键行为

sql - Flask 和 SQLAlchemy 不工作((OperationalError)没有这样的表 :)

sql - 避免 MS Access 中的 SQL 注入(inject)

c# - 使用 Entity Framework 6.1 CodeFirst 的 SQL Server 2014 内存优化表

asp.net - 如何在 SQL 中透视表

.net - 使用 Dapper-dot-net,如何将 SQL 时间列映射到 .Net 类型?

sql - 如果前面没有相同字符,则替换字符

MySQL 到 SQL Server 2005

sql - 这个 CASE 表达式如何到达 ELSE 子句?