יום רביעי, 17 ביוני 2009

Table valued parameters

כידוע ישנם חידושים ושיפורים רבים בפלטפורמת ה- sql server 2008, בין החידושים השימושיים ביותר בתחום האפליקיטיבי הינו: Table valued parameters.

ישנם מקרים בהם אנו רוצים להעביר לפרוצדורה יותר מערך אחד, לדוגמא כאשר אנו רוצים להעביר סט של מספרים לפרוצדורה במטרה לשלב את המספרים ב- where לדוגמא.
בגרסאות הקודמות היינו מממשים את הפתרון בצורות שונות (xml, Dynamic SQL, משרשרים כסטרינג עם מפריד וכו'..) .
ב- sql server 2008 ישנו פתרון יעיל ונוח יותר :Table valued parameters המאפשר לפרוצדורה לקבל משתנה מסוג טבלה.

השלבים למימוש הפתרון:
1. Create a table type
2. Create a procedure to receive data for the table-valued parameter
3. Declare a variable that references the type
4. Add data to the table variable
5. Pass the table variable data to a stored procedure

לדוגמא:
USE AdventureWorks;
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 [AdventureWorks].[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 [AdventureWorks].[Person].[StateProvince];
/* Pass the table variable data to a stored procedure. */
EXEC usp_InsertProductionLocation
@LocationTVP;
GO
בהצלחה.
הוסף רשומת תגובה