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;
答案 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)。通常不需要这样做。如果您有不好的计划,则应该调查为什么。即统计信息,参数嗅探等