【技术帖】征集一些在项目中常用到的过程函数维护计划脚本!

AcHerat 元老 2014-12-22 04:15:07
加精
亲们!本帖非水帖,诚恳求教,希望能搞成收藏帖,大家遇到的常用的或者有想法的都可以发来。

范围:常用过程、函数、维护计划、数据库监控等

1、希望回复常用的相关脚本;
2、希望回复需要实现某些功能的想法;

号外:14年底了,祝福大伙圣诞 元旦 除夕 初一 十五节日快乐!



另:求推荐。
...全文
3223 114 打赏 收藏 转发到动态 举报
写回复
用AI写文章
114 条回复
切换为时间正序
请发表友善的回复…
发表回复
俺是大菠萝 2015-02-15
  • 打赏
  • 举报
回复
执行脚本如下

USE [monitor]
GO
/****** Object:  StoredProcedure [dbo].[dba_man_alter_index_exec_byxl]    Script Date: 2015/2/15 17:19:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*
* 重建索引存储过程(执行)
* 编写人:肖磊
* 更新时间:2015-02-12
* 更新内容:添加对多个库的重建索引 
*			新增索引维护前的存在性判断
*			新增对版本、alwayson副本类型的判断
* 在monitor库建立
*/

CREATE PROC [dbo].[dba_man_alter_index_exec_byxl]
	@Etime VARCHAR(8) ='06:30:00'   --修改阀值应为标准24小时格式
AS
BEGIN
	SET NOCOUNT ON ;
	DECLARE @id INT;						--标识列
	DECLARE @indexname VARCHAR(200)			--索引名
	DECLARE @sql VARCHAR(2000);				--sql语句
	DECLARE @optime SMALLDATETIME;			--操作时间
	DECLARE @fragpercent_altered DECIMAL	--重建后的碎片
	DECLARE @objectid INT					--表ID
	DECLARE @indexid INT					--索引ID
	DECLARE @db_id	INT						--数据库ID
	DECLARE @version INT					--数据库版本号
	DECLARE @role INT						--SQL2012判断角色类型,1为primary,2为secondary,默认为0


	--判断版本,如为2012,则继续判断主\辅助副本
	SET @version=cast(left(CAST(SERVERPROPERTY('productversion') AS VARCHAR),2) AS int)
	SET @role=0
	IF @version>=11
		BEGIN
			SELECT @role=role FROM sys.dm_hadr_availability_replica_states WHERE is_local=1
		END 

	IF (@version<=10) OR (@role=1)
		BEGIN
			--PRINT 'ver:'+CAST(@version AS VARCHAR(10))+' role='+CAST(ISNULL(@role,0) AS VARCHAR(10))+'    IF     '

	--统计7天内需要重建的索引
	SELECT [DB_ID],id,[object_id],[index_id],optype,indexname into #tmp from dbo.dba_man_index_alter_log_byxl WHERE yn=1 and intime>=getdate()-7 ORDER BY id
	WHILE (SELECT COUNT(1) FROM #tmp)>0
	BEGIN
		SELECT top 1 @db_id=DB_ID, @id=id,@objectid=[object_id],@indexid=[index_id],@sql=optype,@indexname=indexname FROM #tmp
		--开始重建
		
		SET @sql='use '+db_name(@db_id)+' ; 
		if exists (SELECT 1 FROM sys.indexes WHERE name='''+@indexname+''') '+CHAR(10)
		+@sql+CHAR(10)+
		'else 
			begin
			update dba_man_index_alter_log_byxl SET yn=0,optime=getdate(),[fragpercent_altered]=null where id='+CAST(@id AS varchar)+
			CHAR(10)+
			'
			return;
			end '			
		exec (@sql)	

		--获取结束时间
		SET @optime=GETDATE()
		--更新日志表
		select @fragpercent_altered=avg_fragmentation_in_percent 
		from sys.dm_db_index_physical_stats(@db_id, null, null , null, 'LIMITED') 
		where object_id=@objectid and index_id=@indexid
		
		UPDATE dba_man_index_alter_log_byxl SET yn=0 ,optime=@optime,[fragpercent_altered]=@fragpercent_altered WHERE id=@id
		--更新临时表
		DELETE FROM #tmp WHERE id=@id
		--判断是否继续操作
		if cast(replace(CONVERT(VARCHAR(8),@optime,8),':','') AS INT) < cast(REPLACE(@Etime,':','') AS INT)
			CONTINUE
		ELSE
			BREAK
	END
	DROP TABLE #tmp

		END
	ELSE
		BEGIN
			--PRINT 'ver:'+CAST(@version AS VARCHAR(10))+' role='+CAST(ISNULL(@role,0) AS VARCHAR(10))+'    ELSE     '
			RETURN(1);
		END
END 
俺是大菠萝 2015-02-15
  • 打赏
  • 举报
回复
我发个索引维护的吧,可以根据阈值判断是重组还是重建,支持08、12,包括12后对大字段的online重建,同时判断2012的alwayson副本情况,主副本执行、辅助副本跳过; 最后记录到log表中,可以根据记录检索当前执行到哪条索引,即将执行哪条索引,需要手动跳过哪些索引 分成统计脚本和执行脚本


/****** Object:  StoredProcedure [dbo].[dba_man_alter_index_byxl]    Script Date: 2015/2/15 17:19:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

/*
* 重建索引存储过程(统计)
* 编写人:肖磊
* 更新时间:2014-11-18
* 更新内容1:添加对多个库的重建索引,在每个需要重建索引的库上分别创建
* 更新内容2:修复bug,完善对online模式的判断,支持2012对varchar(max)在线重建索引
* 在每个用户数据库中创建
*/

CREATE PROC [dbo].[dba_man_alter_index_byxl]
	@rows_LIMIT int = 50000
as
begin
	set nocount on;
	 
	declare    @rows int					--表的总行数
	declare    @intime smalldatetime		--操作时间
	declare    @fragpercent_altered decimal --重建后的碎片
	declare    @objectid         int		--表ID
	declare	   @indexid          int		--索引ID
	declare	   @partitioncount   bigint		--分区ID
	declare	   @schemaname       sysname	--架构
	declare	   @objectname       sysname	--对象名
	declare	   @indexname        sysname	--索引名
	declare	   @partitionnum     bigint		--分区编号?
	declare	   @partitions       bigint		--分区?
	declare	   @frag             float		--碎片比例
	declare	   @command          varchar(1000)
	declare    @need_fillfactor  smallint   --是否需要设置填充因子
	DECLARE    @space_in_M       BIGINT     --表大小
	
	IF NOT EXISTS (SELECT * FROM monitor.sys.objects WHERE object_id = OBJECT_ID(N'MONITOR.[dbo].[dba_man_index_alter_log_byxl]') AND type in (N'U'))
	CREATE TABLE monitor.[dbo].[dba_man_index_alter_log_byxl](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[tablename] [varchar](50) NULL,
	[object_id] [int] NULL,
	[row_numbers] [int] NULL,
	[space_in_M] [BIGINT] NULL,
	[indexname] [varchar](100) NULL,
	[index_id] [int] NULL,
	[fragpercent] [decimal](18, 0) NULL,
	[fragpercent_altered] [decimal](18, 0) NULL,
	[optype] [varchar](1000) NULL,
	[intime] [smalldatetime] NULL,
	[optime] [smalldatetime] NULL,
	[db_id] [int] NULL,
	[db_name] [varchar](100) NULL,
	[yn] [tinyint] NULL,
 CONSTRAINT [PK_DBA_MAN_INDEX_ALTER_LOG_BYXL] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]                                                           
	ELSE                                                     
	delete monitor.dbo.dba_man_index_alter_log_byxl where intime<dateadd(day,-30,getdate())--删除30天前的索引维护记录,确保记录不会无限增长。
	
	CREATE TABLE #bb(
	[tablename] [varchar](50) NULL,
	[object_id] [int] NULL,
	[row_numbers] [int] NULL,
	[space_in_M] [BIGINT] NULL,
	[indexname] [varchar](100) NULL,
	[index_id] [int] NULL,
	[fragpercent] [decimal](18, 0) NULL,
	[fragpercent_altered] [decimal](18, 0) NULL,
	[optype] [varchar](1000) NULL,
	[intime] [smalldatetime] NULL,
	[optime] [smalldatetime] NULL,
	[db_id] [int] NULL,
	[db_name] [varchar](100) NULL,
	[yn] [tinyint] NULL)
	
	
	--取出所有碎片比例大于30%的索引
	select objectid= object_id,indexid = index_id,partitionnum = partition_number,frag= avg_fragmentation_in_percent
	  into #work_to_do
	  from sys.dm_db_index_physical_stats(db_id(), null, null , null, 'LIMITED') --dm_ph_stats join sys.dm_db_partition_stats dm_pa_st on dm_ph_stats.object_id=dm_pa_st.object_id
	 where avg_fragmentation_in_percent >= 30.0 
	   and index_id > 0
	 and object_id in (select distinct a.object_id from sys.dm_db_partition_stats a join  sys.indexes b
		on a.object_id=b.object_id and a.index_id=b.index_id
		where row_count>=@rows_LIMIT and a.index_id>0
		and a.in_row_data_page_count>1280 
		and  not exists (select 1 from monitor.dbo.[dba_man_index_alter_log_byxl] c 
		where c.indexname =b.name and (c.optime >getdate()-3))) 
	 AND NOT (OBJECT_NAME(OBJECT_ID)='orders' AND index_id=1)  --不对orders表的聚集索引进行重建
	-- 没有需要重建/重组的索引,直接返回
	if (select count(*) from #work_to_do)=0 return

	declare partitions cursor for select * from #work_to_do
	;
	with cte as (
		select distinct c.object_id,a.system_type_id  from sys.types a join sys.columns b 
		on (a.system_type_id=b.system_type_id and a.user_type_id=b.user_type_id)
		join sys.tables c on b.object_id=c.object_id
		where a.name in ('text','ntext','image', 'xml') or (a.name in ('varchar','nvarchar','varbinary' ) and (b.max_length=a.max_length or b.max_length=-1))
	)
	select cte.object_id,cte.system_type_id,index_id into #bb_blog_prikey --把包含大对象的表ID和索引存入临时表
	from cte join sys.indexes si on cte.object_id=si.object_id
	where si.[type]=1 order by cte.object_id
	-- Open the cursor.
	open partitions
	-- Loop through the partitions.

	fetch next from partitions into @objectid, @indexid, @partitionnum, @frag
	while @@fetch_status = 0 
	begin
	   select @objectname = o.name, @schemaname = s.name from sys.objects as o	inner join sys.schemas as s  on s.schema_id = o.schema_id
	   where  o.object_id = @objectid
	   select @indexname = name from sys.indexes	where object_id = @objectid	and index_id = @indexid
	   select @partitioncount = count (*) from sys.partitions   where object_id = @objectid	 and index_id = @indexid
	   if @frag < 40.0 
			begin
			   select @command = 'alter index ' + @indexname + ' on ' + @schemaname + '.' + @objectname + ' reorganize '
			   if @partitioncount > 1
					select @command = @command + ' partition=' + convert(char, @partitionnum)
			end
       if @frag >= 40.0 
			BEGIN
			   --保证只对有大对象列的表的聚集索引离线重建
			   if exists(select 1 from #bb_blog_prikey where object_id= @objectid and index_id=@indexid )
					BEGIN
						select @command = 'alter index ' + @indexname +' on ' + @schemaname + '.' + @objectname + ' rebuild with(FILLFACTOR = 90) '                  
						IF (select COUNT(1) from #bb_blog_prikey where object_id= @objectid and index_id=@indexid AND system_type_id NOT IN (34,35,99))>0 and cast(left(CAST(SERVERPROPERTY('productversion') AS VARCHAR),2) AS int)>=11 --SQLSERVER 2012 支持的在线重建聚集索引
							select @command = 'alter index ' + @indexname +' on ' + @schemaname + '.' + @objectname + ' rebuild with(FILLFACTOR = 90,ONLINE=ON,MAXDOP=1) '
					END
                  
				ELSE --非聚集索引
					BEGIN
						--判断版本,2012版system_type_id IN(34,35,99)只能离线重建
						IF cast(left(CAST(SERVERPROPERTY('productversion') AS VARCHAR),2) AS int)>=11
							BEGIN
								IF ( SELECT COUNT(1) FROM sys.index_columns WHERE object_id=@objectid AND index_id=@indexid 
								  AND column_id IN (SELECT column_id FROM sys.columns WHERE object_id=@objectid AND system_type_id IN(34,35,99)) --列类型为text、ntext、image
								  )>0
								  select @command = 'alter index ' + @indexname +' on ' + @schemaname + '.' + @objectname + ' rebuild with(FILLFACTOR = 90) '
								ELSE
								  select @command = 'alter index ' + @indexname +' on ' + @schemaname + '.' + @objectname + ' rebuild with(FILLFACTOR = 90,ONLINE=ON,MAXDOP=1) '                              
							END
						ELSE 
						--判断版本,2012以下版本非聚集索引包含了特定的列只能离线线重建
							BEGIN
								IF EXISTS( SELECT 1 FROM sys.index_columns WHERE object_id=@objectid AND index_id=@indexid  
								  AND column_id IN 
								  (SELECT column_id FROM sys.columns WHERE object_id=@objectid AND system_type_id IN(34,35,99,241) --列类型为text、ntext、image,xml
									OR (object_id=@objectid AND  system_type_id IN(165,167,231) AND max_length=-1))--列类型为varbinary,varchar,nvarchar且为max
								  )
									select @command = 'alter index ' + @indexname +' on ' + @schemaname + '.' + @objectname + ' rebuild with(FILLFACTOR = 90) '
								ELSE
								  select @command = 'alter index ' + @indexname +' on ' + @schemaname + '.' + @objectname + ' rebuild with(FILLFACTOR = 90,ONLINE=ON,MAXDOP=1) '                              
							END                          
						END
			   if @partitioncount > 1
				   select @command = @command + ' partition=' + convert(char, @partitionnum)
			end
	--  取表的总行数
	    set @intime=convert(smalldatetime,getdate(),120)
		select @rows= row_count,@space_in_M=reserved_page_count*8/1024 from sys.dm_db_partition_stats where object_id=(object_id(@objectname)) and index_id=1

		insert into #bb
		values(@objectname,object_id(@objectname),@rows,@space_in_M,@indexname,@indexid,@frag,null,@command,@intime,null,db_id(),db_name(db_id()),1)
	   fetch next from partitions into @objectid, @indexid, @partitionnum, @frag
	end
	close partitions
	deallocate partitions
	INSERT INTO monitor.dbo.dba_man_index_alter_log_byxl
	SELECT * FROM #bb ORDER BY space_in_M DESC
	drop table #bb
	drop table #work_to_do
	drop table #bb_blog_prikey
end
Just_Go_Yo 2015-02-15
  • 打赏
  • 举报
回复
顶起,已经学习到了111层,大家继续~我要学习!
  • 打赏
  • 举报
回复
不错不错不错!
skyclin 2015-01-12
  • 打赏
  • 举报
回复
如果查看一个表 内容值是受哪个台电脑发过来什么SQL而改变?
dvlinker 2015-01-11
  • 打赏
  • 举报
回复
好帖子,顶一个!
ltwkwcdsn 2015-01-04
  • 打赏
  • 举报
回复
煤炭行业经过“黄金十年”的高速发展,我国煤炭产业产能得到快速释放,产量持续攀升,从而加大了调运量。总体来看,随着煤炭资源本身的特殊性及对生产生活的影响力不断上升,经济发展对煤炭物流需求愈加强烈。但“黄金十年”已经过去,目前正是煤炭行业的低谷期。
为了极大地改善现代化专业煤炭物流企业发展的环境,在有关部门的支持下,鲁泰煤业有限公司积极响应号召,成立了鲁泰物矿网www.ltwkw.com这一B2B电子商务平台。煤炭物流网络一旦形成,煤炭流通快速发展,物流优势得到有效发挥,从而破解区域与区域之间的流通障碍,促进了行业与行业之间的交流。
---涛声依旧--- 2015-01-02
  • 打赏
  • 举报
回复

--查表字段及其描述,开发时挺实用
SELECT  
表名 = CASE WHEN A.COLORDER=1 THEN D.NAME ELSE '' END,
表备注 = CASE WHEN A.COLORDER=1 THEN ISNULL(F.VALUE,'') ELSE '' END,
列序号 = A.COLORDER,
列名称 = A.NAME,
列备注 = ISNULL(G.[VALUE],''),
标识 = CASE WHEN COLUMNPROPERTY(A.ID,A.NAME,'ISIDENTITY')=1 THEN '√ ' ELSE '' END,
主键 = CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE='PK' AND PARENT_OBJ=A.ID AND NAME IN (
SELECT NAME FROM SYSINDEXES WHERE INDID IN(
SELECT INDID FROM SYSINDEXKEYS WHERE ID=A.ID AND COLID=A.COLID))) THEN '√' ELSE '' END,
类型 = B.NAME,
字节 = A.LENGTH,
长度 = COLUMNPROPERTY(A.ID,A.NAME,'PRECISION'),
小数位 = ISNULL(COLUMNPROPERTY(A.ID,A.NAME,'SCALE'),0),
允许空 = CASE WHEN A.ISNULLABLE=1 THEN '√ 'ELSE '' END,
默认值 = ISNULL(E.TEXT,'')
FROM 
SYSCOLUMNS A
LEFT JOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE
INNER JOIN SYSOBJECTS D ON A.ID=D.ID AND D.XTYPE='U ' --AND D.NAME<>'DTPROPERTIES'
LEFT JOIN SYSCOMMENTS E ON A.CDEFAULT=E.ID
LEFT JOIN sys.extended_properties G ON A.ID=G.major_id AND A.COLID=G.minor_id   
LEFT JOIN sys.extended_properties F ON D.ID=F.major_id AND F.minor_id=0
where D.NAME='att_interval'   --查询这个表
ORDER BY A.ID,A.COLORDER 
---涛声依旧--- 2015-01-02
  • 打赏
  • 举报
回复
/** 最近在CSDN上见到很多关于master..spt_values的应用,感觉这个东西太好用了, 所以搜索了很多关于这方面的应用。 在此贴上自己的总结结果,希望各路大神批评指教,也希望大家继续把这方面的应用贴上。 */ select number from master..spt_values with(nolock) where type='P' /**解释:master..spt_values表的字段值为P的对应number字段值是从0-2047*/ ----------- --1.将字符串转换为列显示 if object_id('tb') is not null drop table tb go create table tb([编号] varchar(3),[产品] varchar(2),[数量] int,[单价] int,[金额] int,[序列号] varchar(8)) insert into tb([编号],[产品],[数量],[单价],[金额],[序列号]) select '001','AA',3,5,15,'12,13,14' union all select '002','BB',8,9,13,'22,23,24' go select [编号],[产品],[数量],[单价],[金额] ,substring([序列号],b.number,charindex(',',[序列号]+',',b.number)-b.number) as [序列号] from tb a with(nolock),master..spt_values b with(nolock) where b.number>=1 and b.number<len(a.[序列号]) and b.type='P' and substring(','+[序列号],number,1)=',' go drop table tb go /** 编号 产品 数量 单价 金额 序列号 ---- ---- ----------- ----------- ----------- -------- 001 AA 3 5 15 12 001 AA 3 5 15 13 001 AA 3 5 15 14 002 BB 8 9 13 22 002 BB 8 9 13 23 002 BB 8 9 13 24 */ ---------- --2.第四个逗号之前的字符串 declare @str varchar(100) set @str='10,102,10254,103265,541,2154,41,156' ;with cte as( select left(@str,number-1) as ss,row_number()over(order by getdate()) as xh from master..spt_values with(nolock) where number>=1 and number<=len(@str+',') and type='P' and substring(@str+',',number,1)=',' )select ss from cte where xh=4 /** ss ------------------- 10,102,10254,103265 */ ---------- --3.找出两句话中相同的汉字 declare @Lctext1 varchar(100) declare @Lctext2 varchar(100) set @Lctext1='我们都是来自五湖四海的朋友' set @Lctext2='朋友多了路真的好走吗' select substring(@Lctext2,number,1) as value from master..spt_values with(nolock) where type='P' and number>=1 and number<=len(@Lctext2) and charindex(substring(@Lctext2,number,1),@Lctext1,number)>1 /** value ----- 朋 友 的 */ --------- --4.提取两个日期之间的所有月份 if object_id('tb') is not null drop table tb go create table tb(id int identity(1,1),startDate varchar(10),endDate varchar(10)) insert into tb(startDate,endDate) select '2013-01-01','2013-09-25' go declare @startDate varchar(10) declare @endDate varchar(10) select @startDate=startDate,@endDate=endDate from tb with(nolock) select convert(varchar(7),dateadd(mm,number,@startDate),120) as [月份] from master..spt_values with(nolock) where type='P' and number>=0 and dateadd(mm,number,@startDate)<=@endDate go drop table tb go /** 月份 ------- 2013-01 2013-02 2013-03 2013-04 2013-05 2013-06 2013-07 2013-08 2013-09 */ --------- --5.求一个日期所在月份的所有日期 declare @date datetime set @date='2013-08-31' select convert(char(7),@date,120)+'-'+right('0'+convert(varchar(2),number),2) as [日期格式1] ,ltrim(year(@date))+right(100+month(@date),2)+right('0'+ltrim(number),2) as [日期格式2] from master..spt_values with(nolock) where type='P' and number>=1 --and number<=datediff(dd,@date,dateadd(mm,1,@date)) --对于mssql而言该语句不试用于2013-08-31的情况,这时由于9月没有31号,固计算出来的天数是30天 and number<=datediff(dd,convert(char(7),@date,120)+'-01',convert(char(7),dateadd(mm,1,@date),120)+'-01')--转换为1号来计算天数 /** 日期格式1 日期格式2 ----------- -------------------- 2013-08-01 20130801 2013-08-02 20130802 2013-08-03 20130803 2013-08-04 20130804 2013-08-05 20130805 2013-08-06 20130806 2013-08-07 20130807 2013-08-08 20130808 2013-08-09 20130809 2013-08-10 20130810 2013-08-11 20130811 2013-08-12 20130812 2013-08-13 20130813 2013-08-14 20130814 2013-08-15 20130815 2013-08-16 20130816 2013-08-17 20130817 2013-08-18 20130818 2013-08-19 20130819 2013-08-20 20130820 2013-08-21 20130821 2013-08-22 20130822 2013-08-23 20130823 2013-08-24 20130824 2013-08-25 20130825 2013-08-26 20130826 2013-08-27 20130827 2013-08-28 20130828 2013-08-29 20130829 2013-08-30 20130830 2013-08-31 20130831 */ --------- --6.根据给定时间为基准以2小时为划分,得出一天划分出的时间段 declare @time varchar(5) set @time='11:13' select ltrim(a.number)+right(@time,3)+'-'+ltrim(b.number)+right(@time,3) as [划分结果] from master..spt_values a with(nolock),master..spt_values b with(nolock) where a.type='P' and b.type='P' and a.number>=left(@time,2) and b.number<=24 and a.number+2=b.number /** 划分结果 ----------------------------------- 11:13-13:13 12:13-14:13 13:13-15:13 14:13-16:13 15:13-17:13 16:13-18:13 17:13-19:13 18:13-20:13 19:13-21:13 20:13-22:13 21:13-23:13 22:13-24:13 */ --------- --7.将字符串显示为行列 if object_id('tb') is not null drop table tb create table tb(id int identity(1,1),s nvarchar(100)) insert into tb(s) select '车位地址1,车位状况1|车位地址2,车位状况2|车位地址n,车位状况n' ;with cte as( select substring(s,number,charindex('|',s+'|',number)-number) as ss from tb with(nolock),master..spt_values with(nolock) where type='P' and number>=1 and number<=len(s) and substring('|'+s,number,1)='|' )select left(ss,charindex(',',ss)-1)as s1,substring(ss,charindex(',',ss)+1,len(ss))as s2 from cte drop table tb /** s1 s2 ----------- ------------ 车位地址1 车位状况1 车位地址2 车位状况2 车位地址n 车位状况n */
---涛声依旧--- 2015-01-02
  • 打赏
  • 举报
回复
--用SQL直接取MD5的密文 --方法1: select CAST(RIGHT(sys.fn_VarBinToHexStr(hashbytes('MD5','123456')),32) AS VARCHAR(40)) --方法2: declare @In_UserPwd VARCHAR(40) set @In_UserPwd='123456' select CAST(RIGHT(sys.fn_VarBinToHexStr(hashbytes('MD5',@In_UserPwd)),32) AS VARCHAR(40))
kisskk2010 2015-01-02
  • 打赏
  • 举报
回复
学习了,加油楼煮
haitao 2014-12-26
  • 打赏
  • 举报
回复
先写2个功能需求: 1、根据2个整数a、b,生成a到b之间的所有整数,返回记录集,每个数占一条记录——function maketable 2、输入3个字符串s、b、e,返回:s里第一个b和e之间的字符串——function gettag 3、返回当前日期时间的最常用格式:yyyy-mm-dd hh:nn:ss.zzz——这个可能高版本sql已经提供了
无ihi对比 2014-12-26
  • 打赏
  • 举报
回复
mark~!
qq_24849333 2014-12-26
  • 打赏
  • 举报
回复
很好很好,技术流
qiuyeliushui2014 2014-12-26
  • 打赏
  • 举报
回复
HAOHAO
qq_17472861 2014-12-25
  • 打赏
  • 举报
回复
好高深啊,看不懂,学习啦
hanb8899 2014-12-25
  • 打赏
  • 举报
回复
来看看,没见过
qq_24830515 2014-12-25
  • 打赏
  • 举报
回复
无语这个 下东西还要分
如花他哥 2014-12-25
  • 打赏
  • 举报
回复
sql好多东西都看不懂,基础知识还得继续学习,撤~
  • 打赏
  • 举报
回复
引用 19 楼 dovei 的回复:
占坑捡分。。

◆◆◆SQL Server 得到数据库中所有表的名称及数据条数
--建议使用前两种方式,对于SQL SERVER 2005来说,三种方法都好使,如果是其他板本,可以逐一测试一下。

--方法一
select b.name as tablename, 
 c.row_count as datacount 
from sys.indexes a, 
 sys.objects b, 
 sys.dm_db_partition_stats c 
where a.object_id = b.object_id 
 AND b.object_id = c.object_id
 AND a.index_id = c.index_id 
 AND a.index_id < 2 
 AND b.is_ms_shipped = 0 
--方法二
select b.name as tablename, 
 a.rowcnt as datacount 
from sysindexes a, 
 sysobjects b 
where a.id = b.id 
 and a.indid < 2 
 and objectproperty(b.id, 'IsMSShipped') = 0 

2个方法得到的数量不匹配,求解释?
加载更多回复(67)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧