MS SQL 2008 支持 TVP:一种将数据批量上传到存储过程进行处理的有用功能。
是否可以利用现有的表定义,而不是创建用户定义的类型?例如,是否可以创建具有以下签名的存储过程?
CREATE PROCEDURE usp_InsertProductionLocation
@TVP **LocationTable** READONLY
Run Code Online (Sandbox Code Playgroud)
文档似乎表明这是不可能的。
示例代码
/*
Sample code from:
http://msdn.microsoft.com/en-us/library/bb510489.aspx
*/
USE AdventureWorks2008R2;
GO
/* Create a table type. */
CREATE TYPE LocationTableType AS TABLE
( LocationName VARCHAR(50)
, CostRate INT );
GO
/* Create a procedure to receive data for the table-valued parameter. */
CREATE PROCEDURE usp_InsertProductionLocation
@TVP LocationTableType READONLY
AS
SET NOCOUNT ON
INSERT INTO [AdventureWorks2008R2].[Production].[Location]
([Name]
,[CostRate]
,[Availability]
,[ModifiedDate])
SELECT *, 0, GETDATE()
FROM @TVP;
GO
/* Declare …Run Code Online (Sandbox Code Playgroud) 不知道大家有没有遇到过类似UPSERT这个概念的T-SQL命令?使用选项 (1) 或 (2) 执行 INSERT|UPDATE 操作似乎过于复杂且容易出错。
客观的
确保所需的记录(在本例中为 employee_id 1)是最新的,而不必实质上编写相同的查询两次。
语境
选项
执行 SQL UPDATE... 检查 @@rowcount = 0 和 @@error = 0 ... 如果需要,执行 SQL INSERT
/sf/ask/77470221/ "Update using @@rowcount"