问题标签 [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.
tsql - 在插入记录之前遍历 TVP?
我需要一些帮助来编写以下存储过程:
我有接受两个整数值(@ID1 和@ID2)和一个数据表/TVP 的 SQL Server 2008 sproc。
TVP 表包含几个字段,即。标题和说明。
我想遍历 TVP 表并检查 Title 或 Description 是否已存在于我的数据表 tbl_Items 中,其中@ID1 = tbl_Items.ID1 和@ID2 = tbl_Items.ID2。
如果两者都不存在,则将@ID1 和 ID2 的值以及该 TVP 行插入 tbl_Items。
谢谢。
.net - 如何为文本命令创建表值参数
我有一个生成的 SQL 查询块,它将表值参数作为输入。
我有一个DataTable data
输入参数,然后:
问题是,如果命令不是存储过程,则TypeName
需要声明。
参数中列的数量和类型data
可能会有很大差异,所以我没有可以使用的 SQL 类型。
有什么方法可以让我以这种方式使用 TVP?
.net - 表值参数性能问题
我不知道这是否是我如何使用它们或 Microsoft 的实现的问题,但 SQL 2008 表值参数非常缓慢。
一般来说,如果我需要使用 TVP,那是因为我有很多记录——目前它们似乎对于最少记录以外的任何东西都慢得无法使用。
我在.Net中这样称呼他们:
我跑了探查器看看为什么,实际的 SQL 语句是这样的:
不过,这是一种非常缓慢的方法。如果它这样做会更快:
我不确定为什么它不使用更新、更快的语法。或者甚至在引擎盖下使用SqlBulkCopy
.
新语法是在 SQL 2008 中添加的,但 TVP 也是如此(我认为)。
有没有办法让它做到这一点?或者我错过了什么?
ado.net - 准备带有结构化参数的命令
我有这个 ADO.NET 命令对象,我可以设置一些参数并成功执行它。
_mergecommand.Parameters.Add(new SqlParameter("values", SqlDbType.Structured)); _mergecommand.Parameters["values"].TypeName = "strlist"; _mergecommand.Parameters["values"].Direction = ParameterDirection.Input;
_mergecommand.Parameters["values"].Value = valuelist; _mergecommand.ExecuteNonQuery();
这工作正常。但是我想在执行它之前准备好这个命令,因为我需要运行这个数百万次。我正在使用 SQL Server 2008。如果我尝试准备它,我会收到此错误
SqlCommand.Prepare 方法要求所有可变长度参数具有显式设置的非零大小。
知道怎么做吗?
table-valued-parameters - 我可以使用 PetaPoco 将表值参数传递给存储过程吗?
我正在尝试将 PetaPoco 用于具有一些存储过程的项目。它们中的大多数都可以正常工作,但是,我们有几个存储过程需要一个 IntList,它是一个用户定义的表类型。
我还没有找到一种方法来做到这一点,我希望我只是错过了一些明显的东西。我目前的解决方法是将存储过程代码从 SQL 复制到一个字符串中,然后对我的 PetaPoco 数据库执行它:
sql - @table 变量或 #temp 表:性能
我有一个很大的用户定义表类型变量,它具有129 Columns
.
我将2000-3000 Records
一次存储在此变量中并将其传递给各种存储过程和函数以获取其他数据并在相同类型的新变量中进行修改并将此新变量返回给源 SP。(这是因为表类型参数只能作为READONLY
) 传递。
这是我的算法。
我应该使用哪一个@table varible
或#temp table
.net - 存储实时数据的建议,允许使用 .NET API 进行高速存储/检索
我正在尝试找到最佳解决方案,以在当前正在开发但正在运行的解决方案中从根本上替换 SQL 数据库。数据存储需要包括可以备份和/或滚入/滚出的表分区和文件组(如 IBM DB2 分区中所述:http: //www.ibm.com/developerworks/data/library/ techarticle/dm-0605ahuja2/index.html),但也允许大量行插入/更新。
SQL数据库中存储的表目前结构简单: ID long (PRIMARY KEY) TimeStamp DateTime (PRIMARY KEY) Value float Attribute int
ID 与当前数据库中的任何 ID 都没有关联,而是来自其他地方。ID 和 Timestamp 一起用作插入/更新的主键
表中的数据。目前,.NET 使用具有表值参数的存储过程,以允许将数据一次合并到 50K 行的表中。目前我在开发机器上测量了大约 10K 条目/秒,对此我很满意。但是,由于该解决方案对成本敏感,并且由于表增长时的性能要求,我需要能够进行表分区(由 TimeStamp 字段划分)并将分区划分为多个文件以简化维护/备份。此外,我需要让客户至少能够通过 ODBC 对数据执行查询(只读)。
我查看了几个 NoSQL 选项,mySQL 和 DB2(这似乎是目前最合适的)。我将不胜感激任何人对什么是最合适的可能有任何见解。当然,总是可以选择将“分区”逻辑移动到代码中,但如果可能的话,我想避免这种情况。
sql - 在存储过程中使用表值参数的列 -
我将带有 2 个字段(adatetime
和 a varchar(3)
)的 TVP 传递到存储过程中,并且我试图返回表的 datetime 列等于 TVP 日期时间之一或最多几个的所有表行几分钟前(我不介意重复,但更喜欢没有)。
这就是我想出的 - 它目前非常慢(约 5 秒!),我不确定如何改进它。索引表?哪一栏?AtTime
?
我知道这是一个繁琐的查询,因为它需要在尝试匹配行之前计算要查找的范围,所以如果有完全不同但更可取的方法来做到这一点,请告诉我。加上输入 TVP 有约 300 行,表本身有超过 200k,所以有很多数据要匹配和搜索。
编辑我刚刚意识到我的in
查询不会做我想要的 - 我想在 2 分钟范围内返回每个 tvp 行的最新匹配表日期/价格行,而目前它会给我所有匹配的内容between
集合. 我尝试使用MAX(AtTime)
,但这将其限制为一种可能的匹配,所以我回到了第 1 格。
sql - ADO.Net & SP 中的多个插入
我需要从 ado.net 插入多条记录。它应该调用 SP 进行更新。我有多个 CSV 记录,并将它们添加到 SP 的临时表中。一些验证需要这样做。它被插入/更新到主表中。
问题是使用 Temp 表有性能瓶颈。
我已经用谷歌搜索过了。传递多条记录的其他方式可以通过使用 sql 2008 中的 XML 或表值参数来完成。
从性能的角度来看,哪个更好。就我而言,一次可能会发生 500 个并发事务。
请建议。
问候, Mani.M
sql - SQL 存储过程 - 在内部使用参数
我有一个存储过程,我将两个参数传递到其中。一个参数是表值参数,另一个是 nvarchar。这是存储的过程:
然后从代码中,我将我的 DataTable 作为@P1 和一串值作为@P2 传递,看起来像"'Value1', 'Value2', 'Value3', 'Value4'"
是@P2 给我带来了问题。表类型工作正常。通常,当在我的存储过程中使用诸如此类的参数时,我会在内部创建一个字符串,使用参数格式化我的字符串,然后调用 sp_executeSql 以运行查询。但是,这在使用表值参数时不起作用。
有谁知道如何像这样使用表值参数和 nvarchar ?我确定我在尝试正确格式化时遗漏了一些简单的东西。谢谢,
-斯科特