Using custom types as arrays in T-SQL

One of the missing language features in T-SQL language is array support. In some cases you can use custom types to work with arrays that are passed as parameters to your stored procedures.

Custom types in T-SQL enable you to create alias for some table, .Net or built-in type. Once you create a custom type, you can use it for local variables and parameters of functions.

The following statements create int and string arrays as a tables with one column with specified type:

create type "int[]" as table (value int);
create type "string[]" as table (value nvarchar(4000));

You can insert or delete rows from this array using standard T-SQL DML operations.

Objects of this type cannot be stored in other tables, but you can use them as parameters of T-SQL functions:

create function dbo.sum(@array "int[]" readonly)
 returns int
 as begin
 return (select sum(value) from @array)
 end;
 go
create function dbo.avgLength(@array "string[]" readonly)
 returns int
 as begin
 return (select avg(len(value)) from @array)
 end;

Now you can create a local array variable, fill it with some values and pass it to the function as input parameters:

declare @t as "int[]";
insert into @t values(1),(2),(3);
select dbo.sum(@t);
go
declare @t as "string[]";
insert into @t values('test'),('sql'),('server');
select dbo.avgLength(@t);