我们可以在SQL Server 2008中创建参数化视图吗.

或者其他的 Select ?

推荐答案

try 创建一个内联表值函数.例子:

CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS TABLE
AS
RETURN
(
    SELECT Field1, Field2
    FROM SomeTable
    WHERE Field3 = @Parameter1
)

-- Then call like this, just as if it's a table/view just with a parameter
SELECT * FROM dbo.fxnExample(1)

如果查看SELECT的执行计划,则根本看不到该函数,实际上只会显示正在查询的基础表.这很好,因为这意味着在为查询生成执行计划时,将使用基础表的统计信息.

The thing to avoid would be a multi-statement table valued function as underlying table statistics will not be used and can result in poor performance due to a poor execution plan.
Example of what to avoid:

CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
    RETURNS @Results TABLE(Field1 VARCHAR(10), Field2 VARCHAR(10))
AS
BEGIN
    INSERT @Results
    SELECT Field1, Field2
    FROM SomeTable
    WHERE Field3 = @Parameter1

    RETURN
END

在查询中使用该函数时,会有细微的不同,但在性能上可能会有很大的差异.

Sql相关问答推荐

如何用前一个非空值替换空值?

如何转换和汇总行数

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

如何在SQL中按每个子组的顺序更新数据?

提高写密集型表的查询性能

如何在presto/SQL中使用两个数组列创建(分解)单独的行

具有多个条件的SQL否定

在xml.Modify方法中使用子字符串和可能的替代方法

按两列分组,并根据SQL中的条件返回第三个列值

SQL中相同表内的VLOOKUP等价

用替代方案替换 SQL Cursor 以提高性能

SQL SUM Filter逻辑解释

特殊条件计算小计

Oracle SQL:通过将日期与另一个表行进行比较来 Select 值

在presto sql中解析带有区域的时间格式

Postgres更新增量之间的差异

自动生成计算频率的列

MS ACCESS 错误插入 X(...) 从 A 联合 Select ... 从 B

雅典娜弄错了操作顺序

从 JSON 数组中移除对象