为sql server 2005编写动态参数化查询的最佳方法是什么,传递参数值可能为null?
答案 0 :(得分:1)
答案 1 :(得分:1)
像
这样的东西DECLARE @Table TABLE(
val1 VARCHAR(20),
val2 VARCHAR(20)
)
DECLARE @Param VARCHAR(20)
INSERT INTO @Table SELECT '1','2'
SELECT *
FROM @Table
WHERE (@Param IS NULL OR val1 = @Param)
但是,这会降低性能。 我建议您在构建动态查询时,不要将参数添加到where子句中,如果不需要的话。
答案 2 :(得分:1)
仅在可能的情况下:
使用包含的所有参数编写查询,而不是编写常规
WHERE
field1=@param1
and field2=@param2
.....
写
WHERE
(@param1 is null or field1=@param1)
and (@param2 is null or field2=@param2)
...
或
WHERE
field1=isnull(@param1,field1)
and field2=isnull(@param2,field2)
...
但如果出现严重的性能问题,请考虑为每个案例编写查询 只有当这个查询在小型表上每秒执行很多次时,才有理由完全编写它,使用sp_prepare / sp_execute,因此在这种情况下运行速度最快。