一些sql整理

1、通過sql語言查詢表結構:(MSSQL2000中有效)

作用:可以快速生成數據詞典。

  1. SELECT TOP 100 PERCENT c.colid AS 序號, o.name AS 表名, c.name AS 列名,   
  2.       t.name AS 類型, c.length AS 長度, c.isnullable AS 允許空,   
  3.       CAST(m.[value] AS Varchar(100)) AS 說明  
  4. FROM dbo.syscolumns c INNER JOIN 
  5.       dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND   
  6.       o.name <> 'dtproperties' INNER JOIN 
  7.       dbo.systypes t ON t.xusertype = c.xusertype LEFT OUTER JOIN 
  8.       dbo.sysproperties m ON m.id = o.id AND m.smallid = c.colorder  
  9. ORDER BY o.name, c.colid 

說明:【sysproperties】表 原來【SQL2000】中的表【sysproperties】在【SQL2005】中已經不存在了,被是表【extended_properties】取代了

所以在SQL2005中改成:

  1. SELECT TOP 100 PERCENT c.colid AS 序號, o.name AS 表名, c.name AS 列名,   
  2.       t.name AS 類型, c.length AS 長度, c.isnullable AS 允許空,   
  3.       CAST(m.[value] AS Varchar(100)) AS 說明  
  4. FROM dbo.syscolumns c INNER JOIN 
  5.       dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND   
  6.       o.name <> 'dtproperties' INNER JOIN 
  7.       dbo.systypes t ON t.xusertype = c.xusertype LEFT OUTER JOIN 
  8.       sys.extended_properties m ON m.major_id = o.id AND m.minor_id = c.colorder  
  9. ORDER BY o.name, c.colid  

2、通過作業定製定期數據庫備份

定期備份數據庫,減少人工操作,但是缺點是隨着時間的增長,不斷生成備份文件,造成文件容量不斷增大,需要定期刪除早期的不需要的備份。可以定製作業定期刪除規定時間內的備份文件。參考之前整理的資料(數據庫日常維護常用的腳本部分收錄

根據需要修改備份存儲路徑、數據庫名稱、備份名稱;作用備份語句:

  1. declare @filename nvarchar(100);  
  2. set @filename='E:\BackUP_data_bak\databaseName_data\databaseName_backup_'
  3. +convert(char(10),getdate(),112)+'.bak' print @filename;  
  4. backup database [DatabaseDB] 
  5. to disk=@filename with noinit,nounload,name=N'BackUP_databaseName',  
  6. noskip,stats=10,noformat;     /*DatabaseDB:要備份的數據庫名稱;BackUPDatabase:備份名稱*/ 

 3、函數(工作中的需求)

根據給出的字符串得出相應的權重,給出的字符串如:'S41J11G41S21'

執行代碼:

  1. select dbo.fun_GetPrizeValue('S41J11G41S21'

函數代碼:

  1. create function [dbo].[fun_GetPrizeValue](@str varchar(15))  
  2. returns float 
  3. as   
  4. begin 
  5. declare @num int,@i int,@value float,@sum float,@m int 
  6. set @i=1  
  7. set @m=0  
  8. set @sum=0  
  9. if(@str=''set @num=0  
  10. else select @num=len(@str)  
  11. while @i<=(@num/3)  
  12. begin 
  13. select @value=case when substring(@str,@i+@m,2)= 'G2' then 9  
  14. when substring(@str,@i+@m,2)='G3' then 0.95  
  15. when substring(@str,@i+@m,2)='G4' then 0.8  
  16. when substring(@str,@i+@m,2)='S2' then 0.75  
  17. when substring(@str,@i+@m,2)='J1' then 0.7  
  18. when substring(@str,@i+@m,2)='G1' then 95  
  19. when substring(@str,@i+@m,2)='S4' then 0.6  
  20. else 0 end 
  21. set @sum=@value*convert(int,substring(@str,@i+2+@m,1))+@sum 
  22. set @i=@i+1  
  23. set @m=@m+2  
  24. end 
  25. return @sum 
  26. end 

 4、遞歸查詢

當遇到一個樹狀結構存儲的表時,即,一個表中存在兩個字段:ID,ParentID時,通過給出一個ID,獲得該ID的所有子信息,通過創建存儲過程,並調用存儲過程實現。可根據需要做相應的修改。

存儲過程:

  1. create procedure [dbo].[sp_search](@id int)  
  2. as 
  3. declare @level int,@cur int 
  4. create table #stack  
  5. (depth_level int,  
  6. tb1_id int 
  7. )  
  8. create table #tmp  
  9. (seq_no int identity(1,1),  
  10. org_level int not null,  
  11. tb1_id int not null 
  12. )  
  13. select @level=1  
  14. select @cur=@id  
  15. insert into #stack(depth_level,tb1_id) select @level,tableNameID from tableName where tablenameID=@id  
  16. while (@level>0)  
  17. begin 
  18. if exists (select * from #stack where depth_level=@level)  
  19. begin 
  20. set rowcount 1  
  21. select @cur=tb1_id from #stack where depth_level=@level 
  22. set rowcount 0  
  23. insert into #tmp(org_level,tb1_ID)select @level,@cur  
  24. delete from #stack where depth_level=@level and tb1_id=@cur  
  25. insert into #stack select @level+1,tableNameID from tableName where   
  26. tableNameFatherID=@cur and tableNameFatherID<>tableNameID  
  27. if @@rowcount>0  
  28. select @level=@level+1  
  29. end   
  30. else 
  31. begin 
  32. select @level=@level-1  
  33. end 
  34. end 
  35. /*select * from #tmp*/  
  36. select * from tableName where tableNameID in (select tb1_id from #tmp) 

執行代碼:

  1. exec dbo.sp_search 1 

 5、創建數據庫SQL語言

  1. create database DatabaseDB  
  2. on primary 
  3. (  
  4. name='DatabaseDB_Data',--主數據文件的邏輯名  
  5. filename='D:\database\DatabaseDB_data.mdf',--主數據文件的物理名  
  6. size=10MB,--初始大小  
  7. filegrowth=10%--增長率  
  8. )  
  9. log on 
  10. (  
  11. name='DatabaseDB_Log',--日誌文件的邏輯名  
  12. fileName='D:\database\DatabaseDB_data.ldf',--日誌文件的物理名  
  13. size=1MB,  
  14. maxsize=20MB,--最大大小  
  15. filegrowth=10%  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章