簡體   English   中英

如何通過從另一個表獲取值和列名將值插入SQL Server表

[英]How to insert value into a SQL Server table by getting value and column name from another table

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表中獲取值和列名來插入T1表的方法。需要從T2表中獲取列名和到該特定列的值

您可以使用此:

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

您可以嘗試在T2上使用數據透視查詢,以將名稱,地址和電話號碼存儲到每個表名稱的一行中。 然后,只需像以前一樣執行INSERT INTO ... SELECT ,除了使用透視結果。

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子句。

作為一般性評論,如果您這樣做是為了將數據轉換為更規范的形式,那么我認為這很好。 但是,如果您打算像這樣長期存儲數據,則可能需要重新考慮表設計。

您的表結構沒有多大意義。 這些表之間沒有明顯的邏輯關系。 第二個只是緩沖區表嗎?

但是,無論如何,如果要將表中的值插入到另一個表中,可以這樣進行:

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]

我想你看起來像..

INSERT INTO T1(Name) 
SELECT DISTINCT ParamName FROM T2
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 ('+@ColumnName+')
          VALUES ('+@ParamName+')'

EXEC sp_executesql @QUERY

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM