首页 > 解决方案 > SQL 函数的表类型输入的 Null、Empty 或默认值

问题描述

我有一个自定义表类型调用 UniqueIdentifierTable

CREATE TYPE [dbo].[UniqueidentifierTable] AS TABLE(
   [Value] [UNIQUEIDENTIFIER] NULL
)

我有一个将此表类型作为输入的函数:

CREATE FUNCTION [dbo].[MyFunction](@Input UniqueidentifierTable READONLY) 
RETURN @Output ..... 

我尝试通过传入默认值或空值从我的 .NET 层调用它。

.FromSql("SELECT Output FROM MyFunction(NULL)")

上面的电话给了我错误

'操作数类型冲突:NULL 与 UniqueidentifierTable 不兼容'

谷歌搜索后,一些帖子建议将其留空,然后它是默认值,所以我尝试在没有任何输入的情况下调用该函数

.FromSql("SELECT Output FROM MyFunction()")

我会得到错误

为过程或函数 MyFunction 提供的参数数量不足。

如何将默认的空表值类型传递给此 SQL 函数?

标签: .netsql-serverentity-frameworkentity-framework-core

解决方案


您的评论给了我很多信息,我想发布另一种方法,但从 .net 的角度来看,而不是在 SQL 服务器上。

我设法创建了一个空的 DataTable 并以这种方式将其作为参数传递。

       DataTable table = new DataTable();
       table.Columns.Add("Value", System.Type.GetType("System.Guid"));

       SqlParameter param = new SqlParameter("@Input ", table);
       param.TypeName = "dbo.UniqueidentifierTable";
       param.SqlDbType = SqlDbType.Structured;

       //some more code to call using context... ect..

       .FromSql("SELECT Output FROM MyFunction({0})", param)

推荐阅读