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

发布于 2024-09-15 10:11:56 字数 55 浏览 5 评论 0原文

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

What is the best way to write a dynamic parametrized query for sql server 2005 where passed parameter value may be null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

柠檬 2024-09-22 10:11:56

使用:SP_EXECUTESQL

Make use of : SP_EXECUTESQL

绝不放开 2024-09-22 10:11:56

然而

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 子句添加参数。

How about something like

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)

However, this will slow down performance. I would recomend that when you build your dynamic query, dont add parameters to the where clause, if it is not requied.

一个人的旅程 2024-09-22 10:11:56

仅在可能的情况下:
编写包含所有参数的查询,但不要编写常规

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 ,因此在这种情况下它将运行得最快。

Only if possible:
Write the query with all the parameters included, but instead of writing a regular

WHERE
    field1=@param1
    and field2=@param2
    .....

write

WHERE
    (@param1 is null or field1=@param1)
    and (@param2 is null or field2=@param2)
    ...

or

WHERE
    field1=isnull(@param1,field1)
    and field2=isnull(@param2,field2)
    ...

but if serious performance issues occur, consider writing the query for each single case.
ONLY if this query executes many many times per second on small tables, there is a reason to write it entirely, use sp_prepare/sp_execute for it, so it will run fastest in this case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文