为使用表值函数的选择查询更正参数类型

Posted

技术标签:

【中文标题】为使用表值函数的选择查询更正参数类型【英文标题】:Correct parameter types for select queries that use table valued functions 【发布时间】:2015-11-24 08:40:43 【问题描述】:

My SQL Server 2012 包含一个函数Get_Schedule:

CREATE FUNCTION Get_Schedule(
    @pProject_Id   AS INT,
    @pPeriod_Start AS DATETIME2,
    @pPeriod_End   AS DATETIME2)
RETURNS TABLE
WITH SCHEMABINDING
AS
    RETURN (
        SELECT
            42     AS Val1,
            'Foo'  AS Val2);

Visual Studio 2015 的 SQL Server 对象资源管理器显示具有定义类型的函数参数。

但是,当将函数拖到强类型数据集设计器时,DATETIME2 参数将更改为 ANSISTRING,而不是 System.DateTimeSystem.Data.SqlDbType.DateTime2

int 参数,@pProject_Id 确实具有正确的类型。

在使用表适配器的 select 语句访问数据库和创建新的存储过程时都会发生这种情况(过程本身确实具有预期的 DATATIME2 作为参数,但生成的表适配器具有 ansistring)。

如何在生成的表适配器中拥有正确的参数类型?

【问题讨论】:

【参考方案1】:

添加查询及其表适配器后:

打开表适配器的属性; 展开SelectCommand;并且, 将Parameters 编辑为正确的类型。

【讨论】:

对任何采用此方法(有效)的人发出警告 - 如果您随后更改查询,它将重新生成命令并将参数重置为默认值。

以上是关于为使用表值函数的选择查询更正参数类型的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server存储过程中使用表值作为输入参数示例

sql2005中 表值函数是啥

如何为 DB2 表值函数传递日期参数

SQL表值参数批量插入

是否可以在 sqlkata 中查询参数化的表值函数?

SQL 自定义函数(Function)——参数默认值