标签: table-valued-parameters

在EF Core 2.0中将DataTable用作表值参数

[更新的问题描述]我们有一个批量导入过程,我们将其IEnumerable<SqlDataRecord>作为表值参数(TVP)传递给存储过程,因为DataTable类型直到EF Core 1.1才可用。我们刚刚将项目升级为使用.Net Core 2.0,并开始更新代码以使用DataTable。该ExecuteSqlCommandAsync命令开始抛出InvalidCastException。以下是异常详细信息:

System.InvalidCastException occurred
  HResult=0x80004002
  Message=Failed to convert parameter value from a DataTable to a IEnumerable`1.
  Source=<Cannot evaluate the exception source>
  StackTrace:
   at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType, Boolean& coercedToDataFeed, Boolean& typeChanged, Boolean allowStreaming)
   at System.Data.SqlClient.SqlParameter.GetCoercedValue()
   at System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc)
   at System.Data.SqlClient.SqlCommand.BuildParamList(TdsParser parser, SqlParameterCollection parameters)
   at System.Data.SqlClient.SqlCommand.BuildExecuteSql(CommandBehavior behavior, String commandText, SqlParameterCollection parameters, _SqlRPC& rpc)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework table-valued-parameters entity-framework-core

2
推荐指数
1
解决办法
2518
查看次数

带有日期时间列的数据表抛出“转换日期和/或时间时转换失败”

我正在尝试调用一个存储过程,该过程接受一个带有一个字符串和一个日期时间列的表值参数。

存储过程

ALTER PROCEDURE [dbo].[uspStoredProcedureDateTimeTableValueTest]
-- Add the parameters for the stored procedure here
@Param DateTimeType READONLY
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


END
Run Code Online (Sandbox Code Playgroud)

电视节目:

CREATE TYPE DateTimeType AS TABLE 
(
    Name nvarchar(50),
    ModifiedDate datetime
)
Run Code Online (Sandbox Code Playgroud)

.NET 控制台应用程序:

    static void Main(string[] args)
    {
        string connectionString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            DataTable table = new DataTable("Test");
            table.Columns.Add("ModifiedDate", typeof(DateTime));
            table.Columns.Add("Name", typeof(string));

            DataRow …
Run Code Online (Sandbox Code Playgroud)

.net ado.net stored-procedures table-valued-parameters

1
推荐指数
1
解决办法
2168
查看次数

无法在桌面上调用方法?表变量

我试图将外部应用放在表变量上,但我收到如下错误

无法在表上调用方法.

我有Split功能,将字符串拆分为一定长度

CREATE FUNCTION Split(@String varchar(MAX), @SplitLength int) 
RETURNS @Result TABLE (Splited varchar(MAX))
AS
BEGIN

Declare @Cnt int
    Set @Cnt = FLOOR((len(@String)/@SplitLength));

   While @Cnt!=0
    Begin
     SET @Cnt=@Cnt-1;
        While len(@String)>@SplitLength 
        Begin

         INSERT INTO @Result  VALUES (SUBSTRING(@String,1,@SplitLength))

         SET @String=SUBSTRING(@String,@SplitLength+1,len(@String)-@SplitLength) 

        End     

    End

RETURN
END
Run Code Online (Sandbox Code Playgroud)

我与表变量连接,其中包含要分割字符串的列

    DECLARE @LeftSuper TABLE
(
KeyTerm VARCHAR(MAX),
Data VARCHAR(MAX) ,

)
Run Code Online (Sandbox Code Playgroud)

查询如下,哪个生成错误(无法调用表上的方法)

 select KeyTerm ,D.Splited from @LeftSuper
 outer apply [Split](@LeftSuper.Data,300) as D
Run Code Online (Sandbox Code Playgroud)

注意:代码适用于db中的Real Table.

sql sql-server table-variable table-valued-parameters

0
推荐指数
1
解决办法
3721
查看次数

将数据从表值参数插入表

我正在尝试创建一个存储过程,将 TVP 传递给该过程,然后将 TVP 中的一些数据插入到两个表中。

我已经实现了存储过程,但只有第二个插入(唯一不从 TVP 读取的)在工作。另外两个不起作用(不要插入任何东西),我似乎无法弄清楚原因。

我试图在 SQL Server 中创建一个虚拟 TVP 并在那里运行该过程,但这也不起作用。这是因为 TVP 是只读的吗?我不会假设,因为我实际上并没有在 TVP 中插入或更新数据。

有没有办法使这项工作?

谢谢您的帮助!

表值参数定义:

CREATE TYPE dbo.Ingredients 
AS TABLE 
( 
  Quantity int,
  Measure nvarchar(50),
  Ingredient nvarchar(50),
)
GO
Run Code Online (Sandbox Code Playgroud)

存储过程:

ALTER PROCEDURE uspCreateRecipe 
    (@IDUser int, 
     @RecipeName nvarchar(50), 
     @Category nvarchar(50), 
     @Difficulty nvarchar(50), 
     @Duration nvarchar(50), 
     @ING dbo.Ingredients READONLY, 
     @Execution text)
AS
BEGIN
    INSERT INTO dbo.Ingredients 
    VALUES ((SELECT Ingredient FROM @ING WHERE NOT EXISTS (SELECT Ingredient FROM @ING WHERE Ingredient IN (SELECT IngredientName FROM dbo.Ingredients))), 2)

    INSERT …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server stored-procedures table-valued-parameters

0
推荐指数
1
解决办法
55
查看次数

使用表值参数获取sp中的标量变量error

我创建了表值参数,如下所示:

CREATE TYPE dbo.ss AS TABLE(ss1 NVARCHAR(5));
Run Code Online (Sandbox Code Playgroud)

然后我写了这样的存储过程:

ALTER PROCEDURE [dbo].[T_TransactionSummary] 
 @locations dbo.ss readonly
as
begin
...............
.............
AND (Location_tbl.Locid IN (@locations))
Run Code Online (Sandbox Code Playgroud)

执行此操作时我收到错误:

必须声明标量变量"@locations".

我的存储过程有什么问题

sql-server table-valued-parameters

-1
推荐指数
1
解决办法
592
查看次数