时间:2021-07-01 10:21:17 帮助过:3人阅读
--创建临时表1
1 create table #persion 2 3 ( 4 5 [id] [int] NOT NULL, 6 7 [name] [nvarchar](5) NOT NULL, 8 9 [pwd] [nvarchar](20) NULL 10 11 ) 12 13 14 15 insert into #persion values(1,‘zcx‘,‘123‘) 16 17 18 19 SELECT * INTO #psersion1 FROM #persion 20 21 select * from #persion UNION ALL select * from #psersion1 22 23 24 25 DROP TABLE #persion 26 27 DROP TABLE #psersion1
插入select的数据
insert into #persion select id,FirstName,LastName from dbo.Persons
注意和select into的区别
Select into 会创建新的临时表
修改临时表结构
alter table #persion add [tmpid] int NOT NULL IDENTITY(10,1)
alter table #persion add [tmpid1] uniqueidentifier NOT NULL default(newid())
给查询结果集增加自增长列
要求主表Persons没得主键
select IDENTITY(int,1,1)as ID, * into #temp from Persons
SELECT * FROM #temp
和count性质类似
select SUM(1) from Persons
有主键的表添加列
select (select SUM(1) from Persons where id<= a.id) as myID,* from Persons a order by myID
创建表变量:下面代码要同时执行
1 declare @mytable table 2 3 ( 4 5 id int not null, 6 7 name nvarchar(50) null 8 9 ) 10 11 12 13 14 15 INSERT INTO @mytable 16 17 ( id, name ) 18 19 VALUES ( 0, -- id - int 20 21 N‘zcx‘ -- name - nvarchar(50) 22 23 ) 24 25 INSERT INTO @mytable 26 27 ( id, name ) 28 29 VALUES ( 0, -- id - int 30 31 N‘zjj‘ -- name - nvarchar(50) 32 33 ) 34 35 36 37 select * from @mytable
1 DECLARE @index INT 2 3 DECLARE @resukt INT 4 5 SET @index = 1 6 7 SET @resukt = 0 8 9 WHILE @index <= 100 10 11 BEGIN 12 13 SET @resukt += @index 14 15 SET @index += 1 16 17 END 18 19 PRINT @resukt
1 IF ( 3 > 5 ) 2 3 BEGIN 4 5 PRINT ‘true‘ 6 7 END 8 9 ELSE 10 11 BEGIN 12 13 PRINT ‘false‘ 14 15 END 16 17 18 19 When then 20 21 DECLARE @num INT 22 23 DECLARE @name NVARCHAR(30) 24 25 SET @num = 3 26 27 SET @name = CASE WHEN @num = 1 THEN ‘elephant‘ 28 29 WHEN @num = 2 THEN ‘hippo‘ 30 31 WHEN @num = 3 THEN ‘trigger‘ 32 33 ELSE ‘false‘ 34 35 END 36 37 PRINT @name
原则上尽量不要使用游标
(更多信息:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html)
DECLARE @name NVARCHAR(30)
DECLARE mycursor CURSOR FOR SELECT FirstName FROM dbo.Persons
--打开游标
1 OPEN mycursor 2 3 WHILE @@FETCH_STATUS=0 4 5 BEGIN 6 7 FETCH NEXT FROM mycursor INTO @name 8 9 PRINT @name 10 11 END 12 13 CLOSE mycursor 14 15 --回收 16 17 DEALLOCATE mycursor
触发器中的临时表:
Inserted
存放进行insert和update 操作后的数据
Deleted
存放进行delete 和update操作前的数据
1 Create trigger persion_update 2 3 On dbo.Persons 4 5 for Update 6 7 As 8 9 declare @msg nvarchar(50) 10 11 --@msg记录修改情况 12 13 select @msg = N‘姓名从“‘ + Deleted.FirstName + N‘”修改为“‘ + Inserted.FirstName + ‘”‘ from Inserted,Deleted 14 15 --插入日志表 16 17 insert into TAB(Col2)values(@msg)
1 DROP PROCEDURE compute_add 2 3 CREATE PROCEDURE compute_add 4 5 @p1 INT , 6 7 @p2 INT , 8 9 @p3 INT OUTPUT 10 11 AS 12 13 BEGIN 14 15 SET @p3=@p1+@p2 16 17 END 18 19 20 21 DECLARE @result INT 22 23 EXEC compute_add 1,2,@result OUTPUT 24 25 PRINT @result
标量函数
1 CREATE FUNCTION COMPUTE_ADD ( @p1 INT, @p2 INT ) 2 3 RETURNS INT 4 5 AS 6 7 BEGIN 8 9 RETURN @p1+@p2 10 11 END
调用方式
DECLARE @result INT
SET @result=dbo.COMPUTE_ADD(1,2)
PRINT @result
表值函数
1 CREATE FUNCTION mytable ( @id INT ) 2 3 RETURNS TABLE 4 5 AS 6 7 RETURN 8 9 ( SELECT * 10 11 FROM dbo.Persons 12 13 WHERE id < @id 14 15 )
调用方式
select * from dbo.mytable(3)
表值函数:返回指定的列
1 CREATE FUNCTION mytable ( @id INT ) 2 3 RETURNS @table TABLE 4 5 ( 6 7 firstname NVARCHAR(50) , 8 9 lastname NVARCHAR(50) 10 11 ) 12 13 AS 14 15 BEGIN 16 17 INSERT INTO @table 18 19 SELECT firstname , 20 21 lastname 22 23 FROM dbo.Persons 24 25 WHERE id < @id 26 27 RETURN 28 29 END
调用方式
select * from dbo.mytable(3)
函数和存储过程区别
函数 |
存储过程 |
可以返回表变量 |
不能返回表变量 |
不能使用output参数 |
可以使用output参数 |
不能用临时表 |
可以执行对数据库表的操作,可以返回数据集 |
函数内部的操作不能影响到外部环境 |
|
不能通过select返回结果集 |
|
不能update,delete,数据库表(在函数内对带副作用的运算符 ‘UPDATE‘ 的使用无效。) |
|
必须return 一个标量值或表变量或空 |
可以return一个标量值,也可以省略return |
SQL基础系列(3)-变量、函数、存储过程等
标签: