2015-07-18 3 views
0

Я хочу сохранить все значения, имена полей любой таблицы в таблице.Сохраните поле и полевые значения

Целевая таблица: TargetTable

Источник Таблица: MYSOURCETABLE

Я хочу работать следующим образом:

exec FieldveValueWrite("MYSOURCETABLE") 


CREATE TABLE [dbo].[TARGETTABLE](
[Fieldname] [nchar](50) NULL, 
[FieldValue] [nchar](300) NULL 
) ON [PRIMARY] 

Вывод будет выглядеть следующим образом:

[Fieldname] [FieldValue] 
name VEDAT 
surname PALA 
city TOKAT 
counrty TÜRKİYE 

ответ

0

Тот же ответ на такой же вопрос:

declare @TableName varchar(50) = 'MYSOURCETABLE'; 

declare @Columns varchar(4000) = ''; 
declare @InsertValues varchar(4000) = ''; 
declare @ColumnsVar varchar(4000) = ''; 
declare @SQL varchar(max); 

SELECT @Columns = @Columns + '[' + COLUMN_NAME + ']' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName 
SELECT @InsertValues = @InsertValues + '(''' + COLUMN_NAME + ''',@' + COLUMN_NAME + '),' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName 

SET @ColumnsVar = REPLACE(REPLACE(@Columns,'[','@'),']',','); 
SET @ColumnsVar = LEFT(@ColumnsVar, LEN(@ColumnsVar)-1); 

SET @InsertValues = LEFT(@InsertValues, LEN(@InsertValues)-1); 

SET @SQL = @Columns; 
SET @SQL = REPLACE(@SQL,'[','DECLARE @'); 
SET @SQL = REPLACE(@SQL,']',' nvarchar(300);'); 

SET @SQL = @SQL + 'DECLARE RowCursor CURSOR FOR '; 
SET @SQL = @SQL + 'SELECT * FROM ' + @TableName + ';'; 

SET @SQL = @SQL + 'OPEN RowCursor '; 
SET @SQL = @SQL + 'FETCH NEXT FROM RowCursor INTO ' + @ColumnsVar + '; '; 
SET @SQL = @SQL + 'WHILE @@FETCH_STATUS = 0 ' ; 
SET @SQL = @SQL + 'BEGIN '; 

SET @SQL = @SQL + 'INSERT INTO TARGETTABLE Values ' + @InsertValues + ';'; 

SET @SQL = @SQL + 'FETCH NEXT FROM RowCursor INTO ' + @ColumnsVar + '; '; 
SET @SQL = @SQL + 'END '; 

SET @SQL = @SQL + 'CLOSE RowCursor '; 
SET @SQL = @SQL + 'DEALLOCATE RowCursor '; 

exec(@SQL) 
Смежные вопросы