1. 程式人生 > >sql study

sql study

value 刪除 class create right 輸入 prop then --

-- =============================================
-- Author:  lifu
-- Create date: 2017-06-14
-- Description:  sql study
-- =============================================
use db_study;

--判斷是否存在表
IF EXISTS (
    SELECT  * 
    FROM dbo.SysObjects 
    WHERE ID = object_id(N[usertbl]) 
    AND OBJECTPROPERTY
(ID, IsTable) = 1 ) print usertbl exists else BEGIN CREATE TABLE usertbl ( id INT identity(1,1) primary key, name NVARCHAR(20) DEFAULT NULL, age INT DEFAULT NULL ) END IF EXISTS ( SELECT * FROM dbo.SysObjects WHERE ID = object_id(N[stutbl]) AND OBJECTPROPERTY(ID,
IsTable) = 1 ) print stutbl exists else BEGIN CREATE TABLE stutbl( id INT identity(1,1) primary key, name NVARCHAR(20) DEFAULT NULL, age INT DEFAULT NULL, stuID INT DEFAULT NULL ) END --插入數據 --INSERT INTO usertbl(name,age)VALUES(‘lee‘,28) --INSERT INTO usertbl(name,age)VALUES(‘kite‘,32)
--INSERT INTO stutbl(name,age,stuID)VALUES(‘lee‘,28,07110511) --INSERT INTO stutbl(name,age,stuID)VALUES(‘tom‘,19,07110512) --判斷存儲過程是否存在 if exists ( select * from dbo.sysobjects where id = object_id(N[listUser]) and OBJECTPROPERTY(id, NIsProcedure) = 1 ) DROP PROCEDURE listUser ELSE --有輸入參數的存儲過程 create PROCEDURE listUser @name VARCHAR(20) AS DECLARE @age INT SET @age = 28 SELECT * FROM usertbl WHERE name=@name AND age=@age --執行存儲過程 EXECUTE listUser @name = lee --有輸入輸出參數的存儲過程 CREATE PROCEDURE isListUser @age INT, @name VARCHAR(20), @isRight INT OUTPUT AS if exists ( select * from dbo.sysobjects where id = object_id(N[listUser]) and OBJECTPROPERTY(id, NIsProcedure) = 1 ) SET @isRight = @age ELSE SET @isRight = 0 DECLARE @isRight INT EXECUTE isListUser 28,lee,@isRight OUTPUT SELECT @isRight DROP PROCEDURE isListUser --select 賦值 CREATE PROCEDURE getUser AS DECLARE @resultSet VARCHAR(20) SET @resultSet = ( SELECT name FROM usertbl WHERE age = 28 ) SELECT @resultSet EXECUTE getUser DROP PROCEDURE getUser --查看表索引 EXECUTE sp_helpindex @objname=usertbl --update 賦值 CREATE PROCEDURE testUpdate AS DECLARE @nage INT DECLARE @nname VARCHAR(20) UPDATE usertbl SET @nage = age WHERE id=1 SELECT @nname = name FROM usertbl where id=1 PRINT @nage PRINT @nname EXECUTE testUpdate --while DECLARE @a INT SET @a = 1 WHILE @a<10 BEGIN SET @a = @a + 1 END PRINT @a END --if IF (1+1=2) BEGIN PRINT right END ELSE BEGIN PRINT wrong END --when then DECLARE @today INT DECLARE @theWeek NVARCHAR SET @today = 3 SET @theWeek = CASE WHEN @today = 1 THEN 星期一 WHEN @today = 2 THEN 星期二 WHEN @today = 3 THEN 星期三 WHEN @today = 4 THEN 星期四 WHEN @today = 5 THEN 星期五 WHEN @today = 6 THEN 星期六 WHEN @today = 7 THEN 星期日 END PRINT @theWeek --遊標 類似將數據一條一條讀取出來 形成類似棧的結構 DECLARE @name NVARCHAR(20) DECLARE @age INT DECLARE @resultSet NVARCHAR(20) --定義一個遊標 DECLARE myCursor CURSOR FOR SELECT name,age FROM usertbl WHERE id=1 --打開遊標 指針指向第一條數據 OPEN myCursor WHILE @@fetch_status=0 BEGIN --讀取遊標 指針向前推進 FETCH NEXT from usertbl INTO @name,@age SELECT @resultSet = name FROM usertbl WHERE name=@name PRINT @resultSet END --關閉遊標 CLOSE myCursor --摧毀遊標 DEALLOCATE myCursor --return procedure CREATE PROCEDURE testReturn @a INT, @b INT AS BEGIN RETURN @a + @b END DECLARE @c INT EXECUTE @c = testReturn 1,2 SELECT @c --觸發器 CREATE TRIGGER User_onUpdate ON usertbl FOR UPDATE AS DECLARE @msg NVARCHAR(50) --@msg 記錄修改情況 SELECT @msg = N姓名從“ + Deleted.Name + N”修改為“ + Inserted.Name + from Inserted,Deleted PRINT @msg --刪除觸發器 DROP TRIGGER User_OnUpdate --測試觸發器 UPDATE usertbl SET name = biglee WHERE id = 1 --函數 --函數的分類: -- --    1)標量值函數 -- --    2)表值函數 -- --        a:內聯表值函數 -- --        b:多語句表值函數 -- --    3)系統函數 --標量值函數 CREATE FUNCTION FUNC_sum ( @a INT, @b INT ) RETURNS INT AS BEGIN RETURN @a + @b END --調用標量值函數 DECLARE @r INT SET @r = dbo.FUNC_sum(100,50) PRINT @r --內聯表值函數 CREATE FUNCTION FUNC_usertbl ( @age INT ) RETURNS TABLE AS RETURN (SELECT * FROM usertbl WHERE age<@age) --刪除函數 DROP FUNCTION FUNC_usertbl --調用內斂表值函數 SELECT * FROM dbo.FUNC_usertbl(30) --多語句表值函數(可以將查詢的數據集放在局部臨時表中) CREATE FUNCTION FUNC_UserTbl2 ( @myId INT ) RETURNS @t TABLE ( id INT PRIMARY KEY, name NVARCHAR(20) DEFAULT NULL, age INT DEFAULT NULL ) AS BEGIN INSERT INTO @t SELECT * FROM usertbl WHERE id = @myId RETURN END --調用多語句表值函數 SELECT * FROM dbo.FUNC_UserTbl2(1) --一、自定義函數: -- --  1. 可以返回表變量 -- --  2. 限制頗多,包括 -- --    不能使用output參數; -- --    不能用臨時表; -- --    函數內部的操作不能影響到外部環境; -- --    不能通過select返回結果集; -- --    不能update,delete,數據庫表; -- --  3. 必須return 一個標量值或表變量 -- --  自定義函數一般用在復用度高,功能簡單單一,爭對性強的地方。 -- --二、存儲過程 -- --  1. 不能返回表變量 -- --  2. 限制少,可以執行對數據庫表的操作,可以返回數據集 -- --  3. 可以return一個標量值,也可以省略return -- --   存儲過程一般用在實現復雜的功能,數據操縱方面。

sql study