![](/img/trans.png)
[英]How to insert row into a table by select column name and value from another table in 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.