--将col2列值复制给col1 UPDATE table_name SET col1_name=col2_name WHERE col1_condition
当需要备份某张表的记录的时候,常常需要根据现有的表复制一个备份表
下面示例,从表table1复制出一张表table2
--复制部分的字段 SELECT col1,col2,col3…… INTO table_name2 FROM table_name1 --复制所以的字段 SELECT * INTO table_name2 FROM table_name1 --复制部分记录 SELECT * INTO table_name2 FROM table_name1 WHERE table_name1_col_conditionc --只复制表的字段名,不复制数据(即:创建一个空表) SELECT * INTO table_name2 FROM table_name1 WHERE 1<>1 SELECT TOP 0 INTO table_name2 FROM table_name1
IF OBJECT_ID('tempdb.. #tempTable') IS NOT NULL BEGIN DROP TABLE #tempTable; END; SELECT * INTO #tempTable FROM table1; SELECT * FROM #tempTable DROP TABLE #tempTable
复制表table1中某几列数据插入(更新)到表table2中的某几列
INSERT INTO table2_name(col1,col2,col3) SELECT col1,col2,col3 FROM table1 WHERE table1_condition
将存储过程的结果保存在临时表,需要使用insert into,即需要使用先创建临时表的方式
示例:
--准备测试表及数据 CREATE TABLE Person ( [Id] INT, [Name] NVARCHAR(50), [Age] INT, [ClassId] NVARCHAR(50) ); INSERT INTO Person VALUES (2, N'Jerry', 7, N'11'), (3, N'Bob', 7, N'11'), (4, N'Allen', 7, N'11'), (5, N'Andy', 8, N'22'), (6, N'Beck', 8, N'22'), (7, N'Billy', 8, N'22');
--创建一个存储过程 CREATE PROCEDURE pro_GetPerson AS BEGIN SELECT Name,Age FROM Person END
--执行存储过程将结果保存在临时表中 ----创建临时表 IF OBJECT_ID('tempdb..#Person') IS NOT NULL BEGIN DROP TABLE #Person END CREATE TABLE #Person ( Name NVARCHAR(50), AGE INT ) ----执行存储过程并保存到临时表中 INSERT INTO #Person Exec pro_GetPerson SELECT * FROM #Person
----定义表变量并将存储过程的结果赋值给表变量 DECLARE @Person TABLE ( Name NVARCHAR(50), Age INT ) INSERT INTO @Person EXEC dbo.pro_GetPerson SELECT * FROM @Person
若是希望避免手动建表或手动创建表变量,而使用select into的方式
则需要通过OPENROWSET
方法。
除非纯粹就是临时从一个表往另外一个表导数据,不要在存储过程中使用以下方法
示例:
IF OBJECT_ID('tempdb..#temp') IS NOT NULL BEGIN DROP TABLE #temp END SELECT * INTO #temp FROM OPENROWSET('sqloledb', 'server=severname;uid=uid;pwd=password', 'exec 数据库名.dbo.pro');--注:此方法执行存储过程无法带参数 SELECT * FROM #temp;
实现方法和上述执行存储过程保存到临时表和表变量的方法一样
--动态SQL语句 DECLARE @sqlStr VARCHAR(5000) = 'SELECT Name FROM Company'; --表变量 DECLARE @tableVar TABLE ( Name VARCHAR(100) ); --执行动态SQL将结果保存在表变量中 INSERT INTO @tableVar EXEC (@sqlStr); SELECT * FROM @tableVar;
SQL 复制表到另一个表
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句