SQL Server 2005中的动态SQL查询编写

时间:2010-08-19 09:55:14

标签: sql-server-2005 tsql dynamic-sql

为sql server 2005编写动态参数化查询的最佳方法是什么,传递参数值可能为null?

3 个答案:

答案 0 :(得分:1)

利用:SP_EXECUTESQL

答案 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,因此在这种情况下运行速度最快。