數據庫清除日誌
--2005 DUMP TRANSACTION [CMHSDB2] WITH NO_LOG BACKUP LOG [CMHSDB2] WITH NO_LOG DBCC SHRINKDATABASE([CMHSDB2])
SQL查詢執行優先級
1 (8)SELECT (9)DISTINCT (11)<TOP_specification> <select_list> 2 (1)FROM <left_table> 3 (3) <join_type> JOIN <right_table> 4 (2) ON <join_condition> 5 (4) WHERE <where_condition> 6 (5) GROUP BY <group_by_list> 7 (6)WITH {CUBE|ROLLUP} 8 (7)Having <having_condition> 9 (10)ORDER BY <order_by_list>
sql全庫匹配
set nocount on Declare @Str varchar(50) Declare @CName varchar(50) Declare @CID varchar(20) --結果表變量 create table #a ( tableName varchar(100), columnName varchar(100), NumCount int ) set @str='關鍵字' --要搜索的字符串 Declare cur_Depart Cursor --定義遊標 查詢出所有列 For select name,id from syscolumns where id in (Select id From sysobjects Where xtype ='U') and xtype in (select xtype from systypes where name in ( 'varchar', 'nvarchar', 'char', 'nchar','text','ntext')) order by id Open cur_Depart Fetch From cur_Depart into @CName,@CID While @@Fetch_Status=0 Begin Declare @Sql nvarchar(500) Declare @TName nvarchar(500) Declare @Count int Declare @UID nvarchar(500) --查詢出表面及其所有者 Select @TName=name,@UID=(select name from sys.database_principals where principal_id=uid) From sysobjects Where ID=@CID --定義匹配sql set @Sql='select @c=Count(*) from '+@UID+'.'+@TName+' WHERE PATINDEX(''%'+@Str+'%'',['+@CName+'])>0' exec sp_executesql @Sql,N'@c int output',@Count output if (@Count>0) begin insert into #a values(@TName,@CName,@Count) print 'delete ' +@TName +' where PATINDEX(''%'+@Str+'%'',['+@CName+'])>0' --print @TName+' '+@CName +' '+ convert(varchar,@Count) end Fetch From cur_Depart into @CName,@CID End select * from #a drop table #a Close cur_Depart Deallocate cur_Depart
--全庫匹配目標字符串存在的表 declare @name nvarchar(100) declare cur cursor for select name from sysobjects where type = 'U' open cur fetch next from cur into @name WHILE @@FETCH_STATUS = 0 begin declare @sql nvarchar(500),@s varchar(5000) set @s ='' set @sql='select @s=isnull(@s+''+'','''')+'''''',''''''+''+cast(isnull([''+name+''],'''''''') as varchar)'' from syscolumns where id=object_id('''+@name+''') and xtype in(175,239,99,231,35,167) ' exec sp_executesql @sql,N'@s varchar(5000) out',@s out if len(@s) > 0 exec('if exists(select 1 from (select '+ @s+' as col from ['+@name+']) b where charindex(''要查詢的字符串'',col)>0) print '''+@name+'''') fetch next from cur into @name end close cur DEALLOCATE cur
查看當前庫所有表各有多少行數據
1 --查看當前庫所有表各有多少行數據 2 create table #Tmp --創建臨時表#Tmp 3 ( 4 ID int IDENTITY (1,1) not null, --創建列ID,並且每次新增一條記錄就會加1 5 tablename varchar(500), 6 rows int, 7 primary key (ID) --定義ID爲臨時表#Tmp的主鍵 8 ); 9 declare @name nvarchar(100) 10 declare cur cursor for select name from sysobjects where type = 'U' 11 open cur 12 fetch next from cur into @name 13 WHILE @@FETCH_STATUS = 0 14 begin 15 16 declare @rowsd int 17 --select @rowsd=count(1) from @name 18 exec(' 19 declare @rowsd int 20 select @rowsd=count(1) from ['+@name+'] 21 22 insert #Tmp(tablename,rows) values('''+@name+''',@rowsd) 23 ') 24 fetch next from cur into @name 25 end 26 close cur 27 DEALLOCATE cur 28 29 select * from #Tmp order by rows 30 31 drop table #Tmp
遊標
DECLARE @tablename nvarchar(100),@sql nvarchar(200) DECLARE contact_cursor CURSOR FOR SELECT name from sysobjects where xtype='U' OPEN contact_cursor FETCH NEXT FROM contact_cursor INTO @tablename WHILE @@FETCH_STATUS = 0 BEGIN PRINT @tablename -- exec('truncate table '+@tablename) 慎重使用 FETCH NEXT FROM contact_cursor INTO @tablename END CLOSE contact_cursor DEALLOCATE contact_cursor GO
sql server split函數 返回 非空數組成員長度
--sql server split函數 返回 非空數組成員長度 --author:tudou --說明: --支持分割符多字節 --使用方法 --select dbo.f_sqlserver_split_count('1203401230105045','0') --select dbo.f_sqlserver_split_count('120,34012,301,05045',',') --select dbo.f_sqlserver_split_count('abc1234a12348991234','1234') --select dbo.f_sqlserver_split_count('abc',',') create function [dbo].f_sqlserver_split_count(@long_str varchar(8000),@split_str varchar(100)) returns int as begin declare @long_str_tmp varchar(8000),@short_str varchar(8000),@split_str_length int ,@recordCount int set @split_str_length = len(@split_str) set @recordCount = 0 if charindex(@split_str,@long_str)=1 --開頭即是分割符號 則屏棄開頭 set @long_str_tmp=substring(@long_str,@split_str_length+1,len(@long_str)-@split_str_length) else set @long_str_tmp=@long_str --如果結尾不是分割符號 則加上分隔符 if charindex(reverse(@split_str),reverse(@long_str_tmp))>1 set @long_str_tmp=@long_str_tmp+@split_str else set @long_str_tmp=@long_str_tmp while charindex(@split_str,@long_str_tmp)>0 begin set @short_str=substring(@long_str_tmp,1,charindex(@split_str,@long_str_tmp)-1) declare @long_str_tmp_len int,@split_str_position_end int set @long_str_tmp_len = len(@long_str_tmp) set @split_str_position_end = len(@short_str)+@split_str_length set @long_str_tmp=reverse(substring(reverse(@long_str_tmp),1,@long_str_tmp_len-@split_str_position_end)) if @short_str<>'' set @recordCount = @recordCount+1 end return @recordCount end
數據庫操作:創建-附加-分離等
--附加 if db_id('libraryDB') is not null begin return end else begin exec sp_attach_db @dbname='libraryDB', @filename1='E:\LibrarySystem\data\libraryDB.mdf', @filename2='E:\LibrarySystem\data\libraryDB.ldf' end --分離 if db_id('libraryDB') is not null begin use master exec sp_detach_db 'libraryDB' return end --Sql啓動外圍 Exec sp_configure 'show advanced options',1 reconfigure Exec sp_configure 'xp_cmdshell',1 reconfigure go --調用DOs命令創建文件夾 Exec xp_cmdshell 'md E:\library',no_output go --=======================================創建LibraryDb數據庫=================== --檢查是否存在library數據庫 if exists(select * from sys.databases where name='LibraryDb') begin drop database LibraryDb end go --創建數據庫 create database LibraryDb on ( /*數據庫文件的詳細描述*/ name='LibraryDb', ----主數據庫文件的邏輯名 filename='E:\library\LibraryDb.mdf', ----主數據文件的物理名 size=3mb, --主文件的初始大小 maxsize=100mb, --主文件最大值 filegrowth=10% --增長率 ) log on ( /*日誌文件的詳細描述*/ NAME = 'libraryDB_ldf', --日誌文件的邏輯名 FILENAME = 'E:\library\libraryDB_ldf.ldf', --日誌文件的物理名 SIZE = 1MB, --初始大小 MAXSIZE = 15MB, --最大值 FILEGROWTH = 10% --增長率 ) go use LibraryDb go
sqlserver 基本語句