【发布时间】:2018-11-14 15:27:50
【问题描述】:
甲骨文:
STR_SQL := ' SELECT ... where x = :1 and y = :2';
OPEN RS FOR STR_SQL USING VAR1, VAR2;
Postgres:
STR_SQL := ' SELECT ... where x = $1 and y = $2';
OPEN RS FOR EXECUTE STR_SQL USING VAR1, VAR2;
如何在 SQL Server 中执行此操作?我想要的只是避免多个执行计划
编辑:
在带有@ 的查询中使用变量是否会保留执行计划?
SET @RS = CURSOR FOR SELECT ... where x = @MY_PROC_PARAMETER
OPEN @RS;
FETCH NEXT FROM @RS INTO @VRESULT_VALUE;
【问题讨论】:
-
为什么要在这些数据库中使用游标? SQL 是一种基于集合的语言。根据子查询的结果使用 UPDATE、INSERT 或 SELECT 比编写游标更快(至少 N 倍)并且更容易
-
您不需要保留执行计划。 SQL Server 缓存它们。 游标在这种情况下也会损害性能,因为 SQL Server 可以缓存整个查询的计划,而游标只允许缓存
SELECT部分。 -
无论如何,副本显示了如何声明游标,但正确的查询会更快地执行 lot - 对于 1M 行,它的执行速度可以快 1M 倍
标签: sql sql-server database database-cursor