DDL для ваших данных
create table UsersTable(
UserId int, FirstName varchar(100), LastName varchar(100), MiddleInit varchar(100),
Suffix varchar(100), Age int, Position varchar(100));
insert UsersTable select
'1','John','Graham','P.','Jr.','35','Analyst II' union all select
'2','Bill','Allen','T.','III','45','Programmer I' union all select
'3','Jenny','Smith','K.',null,'25','Systems Engineer' union all select
'4','Gina','Todd','J.',null,'55','Analyst II';
create table tabletypes(
TableTypeId int, TableType varchar(100));
insert tabletypes select
1, 'Names' union all select
2, 'Positions' union all select
3, 'Age';
create table TableFields(
FieldId int,TableTypeId int,FieldName varchar(100),Description varchar(100));
insert TableFields select
'1','1','FirstName','descr1' union all select
'2','1','LastName','descr2' union all select
'3','1','MiddleInit','descr3' union all select
'4','1','Suffix','descr4';
create table ModifiedUsersTable(
Id int identity, userid int, fieldid int, value varchar(max));
Скрипт для заполнения ModifiedUsersTable
declare @sql nvarchar(max)
select @sql = coalesce(@sql+ '
union all
', '') + '
select userid,' + right(FieldId,12) + ',' + quotename(fieldname) + '
from userstable'
from tablefields
set @sql = @sql + '
order by userid, 2'
-- print @sql -- uncomment to see the generated SQL
exec (@sql)