2017-08-04 51 views
0
create table T1 
(
    Name varchar(50), 
    Address varchar(50), 
    Tel varchar(50) 
); 

create table T2 
(
    ParamName varchar(50), 
    ParamValue Varchar(60), 
    TableName varchar(50) 
); 

insert into T2 values('Name', 'test', 'Member'); 
insert into T2 values('Address', 'testAdd', 'Member'); 
insert into T2 values('Tel', 'test', 'Member'); 

insert into T1(Select distinct ParamName from T2) 
values(select ParamValue from T2) 

我正在尋找通過從T2 table.need獲取值和列名來插入T1表的方法從T2表中獲取列名,並將值賦予該特定列如何通過從另一個表中獲取值和列名將值插入到SQL Server表中

+1

你能告訴我們什麼是兩個表之間的邏輯_relation_?這看起來對我來說可能是糟糕的設計。 –

+0

這看起來不像數據庫的正確使用。看起來您正在使用表T2臨時存儲值,這些值彼此無關。列ParamValue migh保存一個名稱,並在下一行保存電話號碼。似乎不正確。您應該直接從數據源插入T1 –

+0

T1列名稱= T2 ParmName這僅僅是樣本表 插入到T1(從T2中選擇不同的參數名稱) 值(從T2中選擇Para​​mValue) –

回答

-1
DECLARE @TableName varchar(50) = 'T1' 
DECLARE @ColumnName varchar(MAX) 
SELECT @ColumnName= coalesce(@ColumnName + ', ', '') + a.COLUMN_NAME 
from (SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    inner join T2 on TableName = TABLE_NAME 
    WHERE TABLE_NAME = @TableName and ParamName = COLUMN_NAME) a; 
print @ColumnName 

declare @ParamName varchar(MAX) 
SELECT @ParamName = coalesce(@ParamName + ', ', '') + ''''+a.ParamValue+'''' 
from (SELECT COLUMN_NAME,ParamValue 
    FROM INFORMATION_SCHEMA.COLUMNS 
    inner join T2 on TableName = TABLE_NAME 
    WHERE TABLE_NAME = @TableName and ParamName = COLUMN_NAME) a; 
print @ParamName 

declare @QUERY nvarchar(MAX); 
SET @QUERY = 'INSERT INTO T1 ('[email protected]+') 
      VALUES ('[email protected]+')' 

EXEC sp_executesql @QUERY 

這是我期待的答案,謝謝大家的幫助

1

您的表結構沒有多大意義。表格之間沒有明顯的邏輯關係。第二個只是一個緩衝表?

在任何情況下,但是,如果要插入從表中的值到另一個表你那樣做:

INSERT INTO [target_table] ([target_column_1], [target_column_2], ..., [target_column_n]) 
    SELECT [source_column_1], [source_column_2], ..., [source_column_n] 
     FROM [source_table] 
     WHERE [conditon] 
1

您可以使用此:

INSERT INTO T2(Column1,Column2) 
SELECT Column1, Column2 FROM T1 
GROUP BY Column1; 
0

我認爲你是尋找像..

INSERT INTO T1(Name) 
SELECT DISTINCT ParamName FROM T2 
+0

之後,你希望T1保留什麼樣本ParamName是列名,Paramvalue是該列的值,我想從T2表中獲得兩個。有辦法在t2表中獲得 –

2

你可以嘗試使用上T2樞軸查詢來獲取的名字,一個地址和電話號碼放在每個表名的單個行上。然後,就像你一樣做一個INSERT INTO ... SELECT,除了使用pivoted結果。

INSERT INTO T1 (Name, Address, Tel) 
SELECT 
    MAX(CASE WHEN ParamName = 'Name' THEN ParamValue END) AS Name, 
    MAX(CASE WHEN ParamName = 'Address' THEN ParamValue END) AS Address, 
    MAX(CASE WHEN ParamName = 'Tel'  THEN ParamValue END) AS Tel 
FROM T2 
GROUP BY TableName 
-- WHERE TableName IN ('Member', ...) 

,如果你想限制插入到特定的表名,您可以取消該WHERE條款。

作爲一般性評論,如果你這樣做是爲了讓你的數據進入更規範化的形式,那麼我認爲它是好的。但是,如果您計劃長期存儲數據,則可能需要重新考慮您的表格設計。

+0

ParamName是列的名稱和Paramvalue是該列的值,我想從T2 table.are有辦法做到這一點 –

+0

我的答案已經這樣做。 –

相關問題