MS SQL 2008 поддерживает TVP: полезная функция для массовой загрузки данных в хранимую процедуру для обработки.
Вместо того, чтобы создавать определенный пользователем тип, возможно ли использовать существующее определение таблицы? Например, возможно ли создать хранимую процедуру со следующей подписью?
CREATE PROCEDURE usp_InsertProductionLocation
@TVP **LocationTable** READONLY
Документация, кажется, предполагает, что это невозможно.
ОБРАЗЕЦ КОДА
/*
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 a variable that references the type. */
DECLARE @LocationTVP
AS LocationTableType;
/* Add data to the table variable. */
INSERT INTO @LocationTVP (LocationName, CostRate)
SELECT [Name], 0.00
FROM
[AdventureWorks2008R2].[Person].[StateProvince];
/* Pass the table variable data to a stored procedure. */
EXEC usp_InsertProductionLocation @LocationTVP;
GO
/*
The following is not part of the original source code:
*/
CREATE TABLE LocationTable(
LocationName VARCHAR(50)
, CostRate INT );
GO
источник
Erland Sommarskog имеет обширную статью, описывающую, как использовать TVP.
Посмотрите, оно того стоит!
Короче говоря, вы не можете использовать существующий тип, как в предыдущем ответе Аарона Бертранда . Но, по крайней мере, это массовый перевод ..
источник
Основываясь на ответе Джитена, упрощая некоторую логику местами, учитывая
identity
столбцы (используяsys.
таблицы вместоSCHEMEA
)источник