Questions tagged «table-variable»

2
为什么TVP必须是READONLY,为什么其他类型的参数不能是READONLY
根据此博客,如果函数或存储过程的OUTPUT参数不是参数,则它们本质上是按值传递的;如果它们是参数,则本质上应视为传递引用的更安全的版本OUTPUT。 最初,我认为强制声明TVP的目的READONLY是向开发人员明确表示不能将TVP用作OUTPUT参数,但由于我们无法将非TVP声明为,因此还必须继续进行下去READONLY。例如,以下失败: create procedure [dbo].[test] @a int readonly as select @a 消息346,级别15,状态1,过程测试 参数“ @a”不是表值参数,因此不能声明为READONLY。 由于统计数据未存储在TVP上,因此阻止DML操作的原理是什么? 是否与OUTPUT出于某些原因不希望TVP成为参数有关?

3
在数据库表中使用SPID(而不是表变量)
用于预订事物的交易数据库... 我们的供应商被要求用@tablevariables替换#temptables(由于繁重的编译锁),但他们替换为一个实际表,该表将SPID作为列添加,以确保存储过程仅作用于适用的行。 您认为这种操作方法有任何风险吗?在所有事务都隔离在它们自己的事务中之前,我担心我们最终可能会将该表锁定一堆,但他们的意见是SQL使用行级锁定并且不会创建更多的锁。 SQL Server版本:2016 Enterprise-13.0.5216.0 CREATE TABLE dbo.qryTransactions ( ID int IDENTITY (0,1) NOT NULL CONSTRAINT pk_qryTransactions PRIMARY KEY CLUSTERED, spid int NOT NULL, OrderID int, ItemID int, TimeTransactionStart datetime, TimeTransactionEnd datetime, ...other fields ) CREATE INDEX idx_qryTransactions_spidID ON qryTransactions (spid, ID) INCLUDE (ItemID, OrderID, TimeTransactionStart, TimeTransactionEnd)

1
在这种情况下,表变量如何提高查询性能?
对于这种特定情况,我将在下面尝试说明,使用表变量比不使用表变量要好。 我想知道为什么,如果可能的话,摆脱表变量。 这是使用表变量的查询: USE [BISource_UAT] GO set statistics io on SET STATISTICS TIME ON SET NOCOUNT ON; DECLARE @OrderStartDate DATETIME = '15-feb-2015' DECLARE @OrderEndDate DATETIME = '28-feb-2016' DECLARE @tmp TABLE ( strBxOrderNo VARCHAR(20) ,sintReturnId INT ) INSERT INTO @tmp SELECT strBxOrderNo ,sintReturnId FROM TABLEBACKUPS.dbo.tblBReturnHistory rh WHERE rh.sintReturnStatusId in ( 3 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.