IF OBJECT_ID('Customers') IS NULL BEGIN CREATE TABLE Customers ( CustomerId int not null identity(1,1), [Customer Name] nvarchar(100), AddressId int, Approved bit ); INSERT INTO Customers ([Customer Name], AddressId) VALUES (N'Eralper Yilmaz', 101) INSERT INTO Customers ([Customer Name], AddressId) VALUES (N'Bill Gates', 102) INSERT INTO Customers ([Customer Name], AddressId) VALUES (N'Kylie Minogue', 103) INSERT INTO Customers ([Customer Name], AddressId) VALUES (N'Angelina Jolie', 104) -- SELECT * FROM Customers END GO /* SELECT * FROM sys.types WHERE is_user_defined = 1 AND is_table_type = 1 SELECT * FROM sys.table_types */ GO IF EXISTS ( SELECT * FROM sys.table_types WHERE name = N'CustomersTableType' ) DROP TYPE CustomersTableType GO CREATE TYPE CustomersTableType AS TABLE ( CustomerId int, CustomerName nvarchar(100), AddressId int ) /* sp_help CustomersTableType SELECT * FROM sys.parameters WHERE is_readonly = 1 SELECT OBJECT_NAME(object_id) FROM sys.parameters WHERE is_readonly = 1 SELECT * FROM sys.all_columns WHERE object_id = (SELECT type_table_object_id FROM sys.table_types) */ IF OBJECT_ID('Process_New_Customers') IS NOT NULL DROP PROC Process_New_Customers GO --Msg 352, Level 15, State 1, Procedure Add_New_Customers, Line 1 --The table-valued parameter "@NewCustomers" must be declared with the READONLY option. CREATE PROC Process_New_Customers ( @NewCustomers CustomersTableType READONLY ) AS DECLARE @CustomerId int DECLARE CustomerCursor CURSOR FAST_FORWARD FOR SELECT CustomerId FROM @NewCustomers OPEN CustomerCursor FETCH NEXT FROM CustomerCursor INTO @CustomerId WHILE @@FETCH_STATUS = 0 BEGIN UPDATE Customers SET Approved = 1 WHERE CustomerId = @CustomerId AND LEN([Customer Name]) > 5 FETCH NEXT FROM CustomerCursor INTO @CustomerId END CLOSE CustomerCursor DEALLOCATE CustomerCursor GO /* SELECT * FROM sys.parameters WHERE is_readonly = 1 SELECT OBJECT_NAME(object_id) FROM sys.parameters WHERE is_readonly = 1 SELECT * FROM sys.all_columns WHERE object_id = (SELECT type_table_object_id FROM sys.table_types) */ GO SET NOCOUNT ON DECLARE @NewCustomers CustomersTableType INSERT INTO @NewCustomers ( CustomerId, CustomerName, AddressId ) SELECT CustomerId, [Customer Name], AddressId FROM Customers SET NOCOUNT OFF EXECUTE Process_New_Customers @NewCustomers GO