MSSQL_10 数据修改

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43650411/article/details/102763611

目录

  • INSERT
  • UPDATE
  • DELETE
  • 用TOP限制修改
  • OUTPUT


1.INSERT

  • INSERT & VALUES
    1)insert语句不指定列值:identity属性列、默认值列、计算列
    2)一个insert一次最多插入1000行
insert into tablle_or_view [(col_list)]
values
	(value_lis_1),
	...
  • INSERT & SELECT
    将查询结果插入另一个表。
select * from tt.dbo.pivot_voc
go
create table tt.dbo.item_pivot(item varchar(20), blue int, yellow int, red int)
go
insert into tt.dbo.item_pivot select * from tt.dbo.pivot_voc
go
select * from tt.dbo.item_pivot
  • INSERT & EXEC
    PROC动态SELECT语句返回的结果集写入现有表。
USE master
GO
IF DB_ID('tt') IS NOT NULL
	DROP DATABASE tt
GO
CREATE DATABASE tt
GO

CREATE TABLE tt.dbo.voc
(
	item varchar(20),
	color varchar(20),
	quantity int
)
INSERT INTO tt.dbo.voc
VALUES
	('Chair', 'blue', 1), ('Chair', 'blue', 2),
	('Chair', 'red', 3), ('yizi', 'red', 1),
	('yizi', 'blue', 6)
GO
SELECT * FROM tt.dbo.voc
GO

USE tt
GO
-- 存储过程创建、删除时不能用:dbname.dbo.表名?
IF OBJECT_ID('dbo.getTopN') IS NOT NULL
	DROP PROC dbo.getTopN
GO
CREATE PROC getTop
	@n int,
	@rc int output
AS
	SELECT TOP(@n) * FROM tt.dbo.voc

	SET @rc = @@ROWCOUNT
GO
IF OBJECT_ID('tempdb..#T') IS NOT NULL
	DROP TABLE #T
GO
CREATE TABLE #T
(
	item varchar(20),
	color varchar(20),
	quantity int
)
GO
DECLARE @rc int
INSERT INTO #T
  EXEC getTop @n = 3, @rc = @rc output
SELECT @rc
SELECT * FROM #T
GO
-- DROP TABLE #T 

注:删除临时表tempdb..#T;TOP返回不确定行。

  • SELECT INTO
    创建新表并插入查询结果集。
    注:不能创建已分区表,即使源表已分区, 也不会使用源表的分区方案。

2.UPDATE

  • SET & WHERE
UPDATE T1
SET col1 = val1, ... coln = valn
WHERE exp
  • FROM
select distinct item, color 
  into tt.dbo.voc_ 
from tt.dbo.voc

alter table tt.dbo.voc_
add Qt_sum float

select * from tt.dbo.voc_

update tt.dbo.voc_
set Qt_sum = Qt.Qt_sum
from (select item, color, sum(quantity) AS Qt_sum
	from tt.dbo.voc
	group by item, color) Qt

  • CTE & VIEW
    当使用FROM子句进行更新时,子查询会比较复杂,结合使用CTE或VIEW可得到简化。
-- cte
with cte_qt_sum as
(
	select item
		, color
		, sum(quantity) AS Qt_sum
	from tt.dbo.voc
	group by item, color
)
update tt.dbo.voc_
set Qt_sum = C.Qt_sum
from cte_qt_sum C
GO
select * from tt.dbo.voc_
GO

-- view
CREATE VIEW v_qt_sum
AS
(
	SELECT item
		, color
		, SUM(quantity) AS Qt_sum
	FROM tt.dbo.voc
	GROUP BY item, color
)
GO
UPDATE tt.dbo.voc_
SET Qt_sum = V.Qt_sum
FROM v_qt_sum V
GO
SELECT * FROM tt.dbo.voc_
GO
DROP VIEW v_qt_sum

3.DELETE

  • DELETE
DELETE table_or_view
FROM T1
WHERE 条件

注:默认table_or_view与T1相同时,可省略。但当使用OUTPUT时,一般不省略。

  • TRUNCATE TABLE
    删除全部行,速度更快,且使用更少资源。

4.用TOP限制修改数量

注:在已分区视图中不能将TOP与UPDATE、DELETE语句一起用。

DELETE TOP(1) FROM tt.dbo.voc_
WHERE Qt_sum = 1
GO

INSERT TOP(2) INTO tt.dbo.voc_
VALUES
	('chair', 'red', 1), ('yizi', 'red', 2)
GO

UPDATE TOP(1) tt.dbo.voc_
SET color = 'blue'
WHERE item = 'chair'
	AND color = 'red'
GO

5.OUTPUT语句

输出受影响行信息

-- 临时表inserted, deleted
INSERT INTO tt.dbo.voc_
 OUTPUT inserted.*
VALUES
	('yizi', 'red', NULL)
GO

DELETE FROM tt.dbo.voc_
 OUTPUT deleted.*
WHERE color = 'red'
GO

UPDATE tt.dbo.voc_
 SET Qt_sum = 1
  OUTPUT deleted.*, inserted.*
GO

-- OUTPUT -> INTO
DELETE FROM tt.dbo.voc_
 OUTPUT deleted.*
  INTO tt.dbo.voc_
WHERE item = 'yizi'
GO

猜你喜欢

转载自blog.csdn.net/weixin_43650411/article/details/102763611
今日推荐