问题标签 [table-valued-parameters]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
207 浏览

sql-server-2008 - table-valued function, returning no value?

this is my function:

when invoked with:

it returns only column names and no values in it even there are existing records in both tables, eg. there are three reservations for the same client.

one more question: can i get results only for confirmed reservations (field confirmed is bit type)

thanks

0 投票
5 回答
7099 浏览

c# - 使用来自客户端应用程序的单个调用从 sql server 中的表中删除多行

这是我的要求:

  • 我想删除表格的多行
  • 我有需要在客户端应用程序中删除的所有 id 的列表。
  • 我只想从我的 C# 客户端应用程序中进行一次调用以删除所有这些记录。

我之前的:

foreach (var id in idList)
{
//Call a Stored Procedure which takes the id
//as parameter and deletes the record
}

这是一个问题,因为循环中的每个项目都有一个数据库命中。

然后我开始使用SQL Server 2008 新引入的表类型和表值参数用于存储过程。

  • 首先在数据库中创建一个表类型,该表类型具有单列(Id 类型)
  • 创建一个接受此新表类型(表值参数)的新存储过程
  • 在客户端代码中,创建一个包含所有要删除的 id 的列表/数据表。
  • 对数据库进行一次调用以使用新的存储过程。

它在客户端代码中非常简单,如下所示:

SqlParameter parameter = new SqlParameter();
parameter.SqlDbType = System.Data.SqlDbType.Structured;

好的 - 虽然我达到了我设定的目标,但这绝对不适用于 2008 年之前的 SQL Server 版本。

所以我所做的就是引入一个回退机制:

  • 我介绍了一个存储过程,它采用逗号分隔的 id 值
  • 我的客户端代码将创建这样的逗号分隔的 id,然后简单地将其传递给新的存储过程。
  • 然后存储过程将拆分所有这些 id,然后一一调用 delete。
  • 因此,在某种程度上,即使在 2008 年之前的 SQL Server 版本上,我也实现了我所设定的目标:使用单个数据库命中删除多行。

但我对我采取的最后一种方法并不那么信服——在互联网上快速搜索并没有发现太多东西。

所以有人可以告诉我,如果我用逗号分隔的 id 和所有东西做正确的事情。
如果 id 是已知的,那么通过单个数据库命中从客户端应用程序中删除多条记录的通常最佳做法是什么。

提前致谢。

0 投票
2 回答
565 浏览

sql - 表值函数

我有一个曾经可以工作的表值函数,但现在不行了,或者至少需要很多时间。

唯一可能改变的是查询读取的表上的数据量。

这是函数的代码。

有趣的是,如果我只在插入语句之后和返回语句之前运行查询,则查询会在几秒钟内工作。

你认为我做错了什么?

0 投票
1 回答
869 浏览

sql - 将整行传递给 SQL CLR 函数/存储过程

我有一个过程,我需要对包含 Forename、Surname、Address1 等列的 SQL 表执行一些复杂的字符串操作

为了执行此数据操作,我设置了各种 SQL CLR C# 函数,但现在我想将整行传递给一个 CLR 函数或存储过程。

你最好的方法是什么?

我正在考虑创建一个表值参数,然后创建一个 SQL CLR SPROC 来接受数据,但数据是只读的还是我可以在 C# 中执行数据操作并返回一个新的数据集?

有任何想法吗?

0 投票
2 回答
3704 浏览

reporting-services - SSRS 2008 的表值参数

我们需要生成 SSRS 报告,我们需要将多值字符串和整数参数转换为数据表并将其传递给存储过程。存储过程包含多个表类型参数。之前我们使用varchar(8000)过,但它也超过了数据类型限制。然后我们想到引入数据表的概念。但是我们不知道如何从 SSRS 传递值。

我们从 GruffCode 中找到了使用 SQL Server Reporting Services 使用表值参数的解决方案。

该解决方案解决了我的问题,我们能够生成报告。但是,有时 SSRS 会返回以下两个错误:

报告处理过程中发生错误。
数据集“DSOutput”的查询执行失败。
字符串或二进制数据将被截断。该语句已终止。

报告处理中出现意外错误。
引发了“System.OutOfMemoryException”类型的异常。

我不确定它何时何地导致了这个问题。

0 投票
2 回答
4126 浏览

sql - 如何在 SQL Server 2008 中的 set insert 期间创建 int ID

我正在探索在存储过程中使用表值参数在对数据库的一次调用中进行多次插入。

表值参数包含的信息或多或少反映了我要插入的表的定义。它只缺少 ID 列。

如果我有下表定义:

类型定义:

和存储过程定义:

如果我的参数中有多个数据集,如何更改必须插入唯一 ID 的内容?

现在,如果我运行以下语句

通过表中没有以前记录的存储过程,我得到

但如果我运行不止一张唱片

我明白了

我想看到的是

在不使用身份的情况下如何有效地完成此任务?

0 投票
1 回答
1611 浏览

c# - 在 Mono 2.10 中使用表值参数 (SqlDbType.Structured)

使用 Mono 时,如果有的话,我如何将表值参数传递到查询中?(我目前使用的是 2.10.12 版本)

似乎 Mono 中的 SqlDbType 枚举没有被扩展以匹配微软的枚举实现,也没有更新 SqlParameter 类以包含 TypeName 属性。

我的背景和我的问题:

  • 我对表值参数非常熟悉
  • 我已经广泛搜索了这个
  • 我尝试在 irc.gnome.org 的 #mono 频道中与其他人联系

非常感谢您对这个问题的任何帮助!

0 投票
1 回答
2460 浏览

sql - 在 SQL Server 2008 的 tablevalue 函数中使用动态 SQL 语句

有没有办法创建一个自定义函数,该函数使用动态创建的 SQL 语句返回一个表?

到目前为止,我尝试过类似的事情

但只是在执行函数时出错。

希望有人可以在这里帮助我。

谢谢,

克里斯

0 投票
1 回答
62 浏览

tsql - 为记录保留未插入的数据

我正在试验表值参数 (TVP) 以及如何从 C# 代码中使用它们。TVP 的一个特定方面给我带来了麻烦:当将数据列表传递给存储过程并希望在数据从数据库返回后更新该列表时。

这是一个包含在列表中的示例类:

将此列表传递给使用 TVP 的存储过程时,我如何能够将 _phoneID 和 _phoneNumber 插入数据库,并在插入后根据 _correlationID 更新具有 _phoneID 的电话列表?

这是一个示例表、类型和存储过程:

关联 id 的原因是能够跟踪从应用程序到数据库并返回的对象。

0 投票
1 回答
2279 浏览

sql - in 子句的表值参数比简单 in 子句慢

我有一些带有一些IN子句的 sql 查询。为了改进查询计划缓存,我决定使用表值参数。这是示例WHERE ID IN (SELECT ID FROM @P1)。@P1 是以下类型的变量:

但我注意到一些查询变得更慢。这是查询示例:

在我的数据库上执行 2.1 秒。

和旧查询:

在 1.8 秒内执行。

我注意到查询计划的差异。第一个查询的计划由两部分组成(一个用于空检查,一个用于 in 子句),然后是连接。而第二个计划只是索引搜索。

有什么方法可以改进我的参数化查询以更快地执行?

PS 这只是示例提炼查询,我想知道这in (select id from @p1)部分是否有任何不正确之处。