如何在SQL Server查询游标上绑定参数

时间:2018-11-14 15:27:51

标签: sql sql-server database database-cursor

Oracle:

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;

1 个答案:

答案 0 :(得分:1)

游标在SQL Server中或在这种情况下的任何循环中表现都不佳,因此我会避免这种情况。将参数绑定到SQL Server中的动态SQL的等效项为sp_executesql。您还可以构建一个串联的查询字符串并执行它:

declare @x int = 1
declare @y int = 2
declare @sql varchar(max) = 'select * from table where x = ' + cast(@x as varchar) + ' and y = ' + cast(@y as varchar)
print @sql
--exec @sql

需要在日期,数字和其他数据类型上进行强制转换,以将+视为连接而不是算术。

但是,如果您确实只想为查询提供全新的执行计划,则可以添加查询提示OPTION(RECOMPILE)。通常不需要这样做。如果您有不好的计划,则应该调查为什么。即统计信息,参数嗅探等