跨多个存储过程的通用 WHERE 子句
Common WHERE Clause Across Multiple Stored Procedures
我有很多查询都使用相同的 WHERE
子句,例如:
--Query1
CREATE PROC Query1
@Param int
AS
BEGIN
SELECT
field2,
COUNT(field2)
FROM
some_table
WHERE
field1 = condition1
AND field2 = @Param
GROUP BY
field1
END
--Query2
CREATE PROC Query2
@Param int
AS
BEGIN
SELECT
field2,
COUNT(field2)
FROM
some_table
WHERE
field1 = condition1
AND field2 = @Param
GROUP BY
field2
END
我想知道我是否可以创建一个函数或某种可以跨查询使用的函数,以防止重复代码并提高可维护性?
您可以为此使用内联 table 值函数
CREATE FUNCTION dbo.some_function
(
@Param INT
)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM some_table
WHERE field1 = condition1
AND field2 = @Param
)
那么您的程序将使用
SELECT field1,
COUNT(field1)
FROM dbo.some_function(@Param)
GROUP BY field1
或
SELECT field2,
COUNT(field2)
FROM dbo.some_function(@Param)
GROUP BY field2
如果您确实在函数定义中使用了 *
,您必须记得在底层 table 定义随 sp_refreshsqlmodule
发生变化时刷新它,以避免出现奇怪的结果,因此它是明确列出列可能更好。
您可以针对 运行 查询创建一个视图,如果刷新时遇到同样的问题。如果使用 select *
创建视图,则创建的视图的列与创建视图时的 *
相匹配。
CREATE_VIEW func_view AS
SELECT *
FROM some_table
WHERE field1 = condition1
然后,运行你的选择喜欢select * from func_view group WHERE field2 = @Param
我有很多查询都使用相同的 WHERE
子句,例如:
--Query1
CREATE PROC Query1
@Param int
AS
BEGIN
SELECT
field2,
COUNT(field2)
FROM
some_table
WHERE
field1 = condition1
AND field2 = @Param
GROUP BY
field1
END
--Query2
CREATE PROC Query2
@Param int
AS
BEGIN
SELECT
field2,
COUNT(field2)
FROM
some_table
WHERE
field1 = condition1
AND field2 = @Param
GROUP BY
field2
END
我想知道我是否可以创建一个函数或某种可以跨查询使用的函数,以防止重复代码并提高可维护性?
您可以为此使用内联 table 值函数
CREATE FUNCTION dbo.some_function
(
@Param INT
)
RETURNS TABLE
AS
RETURN
(
SELECT *
FROM some_table
WHERE field1 = condition1
AND field2 = @Param
)
那么您的程序将使用
SELECT field1,
COUNT(field1)
FROM dbo.some_function(@Param)
GROUP BY field1
或
SELECT field2,
COUNT(field2)
FROM dbo.some_function(@Param)
GROUP BY field2
如果您确实在函数定义中使用了 *
,您必须记得在底层 table 定义随 sp_refreshsqlmodule
发生变化时刷新它,以避免出现奇怪的结果,因此它是明确列出列可能更好。
您可以针对 运行 查询创建一个视图,如果刷新时遇到同样的问题。如果使用 select *
创建视图,则创建的视图的列与创建视图时的 *
相匹配。
CREATE_VIEW func_view AS
SELECT *
FROM some_table
WHERE field1 = condition1
然后,运行你的选择喜欢select * from func_view group WHERE field2 = @Param