MS SQL 2008 unterstützt TVP: eine nützliche Funktion zum Hochladen von Daten in einen gespeicherten Vorgang für die Verarbeitung.
Ist es möglich, eine vorhandene Tabellendefinition zu nutzen, anstatt einen benutzerdefinierten Typ zu erstellen? Ist es beispielsweise möglich, eine gespeicherte Prozedur mit der folgenden Signatur zu erstellen?
CREATE PROCEDURE usp_InsertProductionLocation
@TVP **LocationTable** READONLY
Die Dokumentation scheint darauf hinzudeuten, dass dies nicht möglich ist.
BEISPIELCODE
/*
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
quelle
Erland Sommarskog hat einen ausführlichen Artikel , der die Verwendung von TVP beschreibt.
Schauen Sie mal rein, es lohnt sich!
Kurz gesagt, Sie können keinen vorhandenen Typ verwenden, genau wie die frühere Antwort von Aaron Bertrand . Aber zumindest ist es eine Massenübertragung ..
quelle
Basierend auf der Antwort von Jiten, einige der Logik an Stellen vereinfachend,
identity
Spalten berücksichtigend (mitsys.
Tabellen anstattSCHEMEA
)quelle