1、通過sql語言查詢表結構:(MSSQL2000中有效)
作用:可以快速生成數據詞典。
- SELECT TOP 100 PERCENT c.colid AS 序號, o.name AS 表名, c.name AS 列名,
- t.name AS 類型, c.length AS 長度, c.isnullable AS 允許空,
- CAST(m.[value] AS Varchar(100)) AS 說明
- FROM dbo.syscolumns c INNER JOIN
- dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND
- o.name <> 'dtproperties' INNER JOIN
- dbo.systypes t ON t.xusertype = c.xusertype LEFT OUTER JOIN
- dbo.sysproperties m ON m.id = o.id AND m.smallid = c.colorder
- ORDER BY o.name, c.colid
說明:【sysproperties】表 原來【SQL2000】中的表【sysproperties】在【SQL2005】中已經不存在了,被是表【extended_properties】取代了
所以在SQL2005中改成:
- SELECT TOP 100 PERCENT c.colid AS 序號, o.name AS 表名, c.name AS 列名,
- t.name AS 類型, c.length AS 長度, c.isnullable AS 允許空,
- CAST(m.[value] AS Varchar(100)) AS 說明
- FROM dbo.syscolumns c INNER JOIN
- dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND
- o.name <> 'dtproperties' INNER JOIN
- dbo.systypes t ON t.xusertype = c.xusertype LEFT OUTER JOIN
- sys.extended_properties m ON m.major_id = o.id AND m.minor_id = c.colorder
- ORDER BY o.name, c.colid
2、通過作業定製定期數據庫備份
定期備份數據庫,減少人工操作,但是缺點是隨着時間的增長,不斷生成備份文件,造成文件容量不斷增大,需要定期刪除早期的不需要的備份。可以定製作業定期刪除規定時間內的備份文件。參考之前整理的資料(數據庫日常維護常用的腳本部分收錄)
根據需要修改備份存儲路徑、數據庫名稱、備份名稱;作用備份語句:
- declare @filename nvarchar(100);
- set @filename='E:\BackUP_data_bak\databaseName_data\databaseName_backup_'
- +convert(char(10),getdate(),112)+'.bak' print @filename;
- backup database [DatabaseDB]
- to disk=@filename with noinit,nounload,name=N'BackUP_databaseName',
- noskip,stats=10,noformat; /*DatabaseDB:要備份的數據庫名稱;BackUPDatabase:備份名稱*/
3、函數(工作中的需求)
根據給出的字符串得出相應的權重,給出的字符串如:'S41J11G41S21'
執行代碼:
- select dbo.fun_GetPrizeValue('S41J11G41S21')
函數代碼:
- create function [dbo].[fun_GetPrizeValue](@str varchar(15))
- returns float
- as
- begin
- declare @num int,@i int,@value float,@sum float,@m int
- set @i=1
- set @m=0
- set @sum=0
- if(@str='') set @num=0
- else select @num=len(@str)
- while @i<=(@num/3)
- begin
- select @value=case when substring(@str,@i+@m,2)= 'G2' then 9
- when substring(@str,@i+@m,2)='G3' then 0.95
- when substring(@str,@i+@m,2)='G4' then 0.8
- when substring(@str,@i+@m,2)='S2' then 0.75
- when substring(@str,@i+@m,2)='J1' then 0.7
- when substring(@str,@i+@m,2)='G1' then 95
- when substring(@str,@i+@m,2)='S4' then 0.6
- else 0 end
- set @sum=@value*convert(int,substring(@str,@i+2+@m,1))+@sum
- set @i=@i+1
- set @m=@m+2
- end
- return @sum
- end
4、遞歸查詢
當遇到一個樹狀結構存儲的表時,即,一個表中存在兩個字段:ID,ParentID時,通過給出一個ID,獲得該ID的所有子信息,通過創建存儲過程,並調用存儲過程實現。可根據需要做相應的修改。
存儲過程:
- create procedure [dbo].[sp_search](@id int)
- as
- declare @level int,@cur int
- create table #stack
- (depth_level int,
- tb1_id int
- )
- create table #tmp
- (seq_no int identity(1,1),
- org_level int not null,
- tb1_id int not null
- )
- select @level=1
- select @cur=@id
- insert into #stack(depth_level,tb1_id) select @level,tableNameID from tableName where tablenameID=@id
- while (@level>0)
- begin
- if exists (select * from #stack where depth_level=@level)
- begin
- set rowcount 1
- select @cur=tb1_id from #stack where depth_level=@level
- set rowcount 0
- insert into #tmp(org_level,tb1_ID)select @level,@cur
- delete from #stack where depth_level=@level and tb1_id=@cur
- insert into #stack select @level+1,tableNameID from tableName where
- tableNameFatherID=@cur and tableNameFatherID<>tableNameID
- if @@rowcount>0
- select @level=@level+1
- end
- else
- begin
- select @level=@level-1
- end
- end
- /*select * from #tmp*/
- select * from tableName where tableNameID in (select tb1_id from #tmp)
執行代碼:
- exec dbo.sp_search 1
5、創建數據庫SQL語言
- create database DatabaseDB
- on primary
- (
- name='DatabaseDB_Data',--主數據文件的邏輯名
- filename='D:\database\DatabaseDB_data.mdf',--主數據文件的物理名
- size=10MB,--初始大小
- filegrowth=10%--增長率
- )
- log on
- (
- name='DatabaseDB_Log',--日誌文件的邏輯名
- fileName='D:\database\DatabaseDB_data.ldf',--日誌文件的物理名
- size=1MB,
- maxsize=20MB,--最大大小
- filegrowth=10%
- )