====== 查找某些库中含有特定列的所有表并清空 ======
#generate script
SELECT CONCAT('rename table `', TABLE_SCHEMA, '`.', TABLE_NAME, ' to `backup`.bk2022_', TABLE_NAME, ';')
FROM information_schema.`COLUMNS`
WHERE TABLE_SCHEMA IN ('db1', 'db2', 'db3') AND COLUMN_NAME = 'user_code';
SELECT CONCAT('create table `', TABLE_SCHEMA, '`.', TABLE_NAME, ' like `backup`.bk2022_', TABLE_NAME, ';')
FROM information_schema.`COLUMNS`
WHERE TABLE_SCHEMA IN ('db1', 'db2', 'db3') AND COLUMN_NAME = 'user_code';
#generate rollback script
SELECT CONCAT('drop table `', TABLE_SCHEMA, '`.', TABLE_NAME, ';')
FROM information_schema.`COLUMNS`
WHERE TABLE_SCHEMA IN ('db1', 'db2', 'db3') AND COLUMN_NAME = 'user_code';
SELECT CONCAT('rename table `backup`.bk2022_', TABLE_NAME, ' to `', TABLE_SCHEMA, '`.', TABLE_NAME, ';')
FROM information_schema.`COLUMNS`
WHERE TABLE_SCHEMA IN ('db1', 'db2', 'db3') AND COLUMN_NAME = 'user_code';
====== Update SQL compatibility Level ======
SELECT name, compatibility_level FROM sys.databases WHERE name = 'db_name'
USE [master]
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'db_name', @new_cmptlevel=90
GO
ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 90 | 100 | 110 }
database_name
COMPATIBILITY_LEVEL { 90 | 100 | 110 }
要使数据库与之兼容的 SQL Server 版本。 该值必须为下列值之一:
90 = SQL Server 2005
100 = SQL Server 2008 和 SQL Server 2008 R2
110 = SQL Server 2012
====== Create Sa Login Replacement ======
create procedure create_sa_login_replacement (@loginname varchar(1000),@execute_immediate bit = 1 )
as
Declare @Databases Cursor
Declare @DbName as nvarchar(64)
Declare @Sql nvarchar(max)
Declare @BaseAddUserSql nvarchar(max)
Declare @BaseAddRoleSql nvarchar(max)
Declare @BaseAddSchemaSql nvarchar(max)
DECLARE @PWD_varbinary varbinary (256)
DECLARE @PWD_string varchar (514)
SET @PWD_varbinary = CAST( LOGINPROPERTY( 'sa', 'PasswordHash' ) AS varbinary (256) )
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@PWD_varbinary)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@PWD_varbinary,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
SELECT @PWD_string = @charvalue
set @sql = 'CREATE LOGIN [' + @loginname + '] WITH PASSWORD=' + @PWD_string + ' HASHED , DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
if @execute_immediate = 0 print @sql else exec(@Sql)
EXEC master..sp_addsrvrolemember @loginame = @loginname, @rolename = N'sysadmin'
====== Shrink Log ======
the SQL to shrink log. Run this script to generate SQL script. then run that script.
USE MASTER
SET NOCOUNT ON
SELECT 'backup log ' + name + ' with truncate_only' + CHAR(13) + CHAR(10) + 'Go'
+ CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
FROM sysdatabases
WHERE name NOT IN ( 'master', 'tempdb', 'model' )
UNION ALL
SELECT 'use ' + d.name + +CHAR(13) + CHAR(10) + 'dbcc shrinkfile(' + f.name +
',1)' + CHAR(13) + CHAR(10) + 'Go' +
CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
FROM MASTER.sys.master_files f
INNER JOIN sysdatabases d
ON d.dbid = f.database_id
WHERE type_desc = 'LOG'
====== Loop ======
declare @sql varchar(400)
declare @i int
SET @sql = '2011-10-01'
set @i=1
while @i<12
begin
set @sql = DATEADD(month, 1, @sql)
select count(*) from trfp where createDate > @sql
set @i=@i+1
end
====== Cursor Usage ======
DECLARE @au_id varchar(11), @au_fname varchar(20) --申明变量
DECLARE authors_cursor CURSOR FOR --申明一个游标
SELECT au_id, au_fname FROM authors
--打开游标
OPEN authors_cursor
--取出值
FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname
--循环取出游标的值
WHILE @@FETCH_STATUS = 0
BEGIN
Print @au_id
Print @au_fname
Print '###'
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname
END
CLOSE authors_cursor --关闭游标
DEALLOCATE authors_cursor --释放游标
====== Update column which includes "Email" ======
declare @sql varchar(400)
declare @oldSuffix varchar(40)
declare @newSuffix varchar(40)
set @sql = ''
set @oldSuffix = '.xiao5.kk'
set @newSuffix = '.zj'
declare sqlCursor cursor for
select updateSql =
'update ' + o.name + ' set ' + c.name + ' = substring(' + c.name + ', 1, len('
+ c.name + ') - len(''' + @oldSuffix + ''')) + ''' + @newSuffix + '''
where len(' + c.name + ') > 0 and ' + c.name + ' like ''%' + @oldSuffix + ''''
from sysobjects o
inner join syscolumns c on c.id = o.id
where c.name like '%email%' and c.type = 39 and o.xtype = 'U'
order by o.name
open sqlCursor
fetch next from sqlCursor into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from sqlCursor into @sql
end
close sqlCursor
deallocate sqlCursor
====== Print "store procedure" ======
exec sp_helptext N'$StoreProcedureName$'
====== Add Linked Server ======
EXEC master.dbo.sp_addlinkedserver @server = N'$LinkedServerName$',
@provider=N'SQLNCLI',@datasrc=N'$LinkedServerName$', @srvproduct=N'$LinkedServerName$'
====== DB Check & Configuration ======
sp_who
sp_lock
sp_who2
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'awe enabled', 1
RECONFIGURE
GO
sp_configure 'max server memory', 3072
RECONFIGURE
GO
sp_configure 'min server memory', 1024
RECONFIGURE
GO
(MB)