SQLServer中的系统表,存储过程和函数的功能及应用
2009-05-31 15:17
2.数学函数
abs(numeric_expr) 求绝对值
ceiling(numeric_expr) 取大于等于指定值的最小整数
exp(float_expr) 取指数 floor(numeric_expr) 小于等于指定值得最大整数
pi() 3.1415926.........
power(numeric_expr,power) 返回power次方
rand([int_expr]) 随机数产生器
round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入
sign(int_expr) 根据正数,0,负数,,返回+1,0,-1
sqrt(float_expr) 平方根
3.日期函数
getdate() 返回日期
datename(datepart,date_expr) 返回名称如 June
datepart(datepart,date_expr) 取日期一部份
datediff(datepart,date_expr1.dateexpr2) 日期差
dateadd(datepart,number,date_expr) 返回日期加上 number
上述函数中datepart的 写法 取值和意义
yy 1753-9999 年份
qq 1-4 刻
mm 1-12 月
dy 1-366 日
dd 1-31 日
wk 1-54 周
dw 1-7 周几
hh 0-23 小时
mi 0-59 分钟
ss 0-59 秒
ms 0-999 毫秒
日期转换 convert()
4.系统函数
suser_name() 用户登录名
user_name() 用户在数据库中的名字 user 用户在数据库中的名字
show_role() 对当前用户起作用的规则
db_name() 数据库名
object_name(obj_id) 数据库对象名
col_name(obj_id,col_id) 列名
col_length(objname,colname) 列长度
valid_name(char_expr) 是否是有效标识符

--1:获取当前数据库中的所有用户表

select Name from sysobjects where xtype='u' and status>=0

--2:获取某一个表的所有字段

select name from syscolumns where id=object_id(N'表名')

--3:查看与某一个表相关的视图、存储过程、函数

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like N'%表名%'

--4:查看当前数据库中所有存储过程

select name as 存储过程名称 from sysobjects where xtype='P'

--5:查询用户创建的所有数据库

select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

或者

select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

--6:查询某一个表的字段和数据类型

select column_name,data_type from information_schema.columns
where table_name = N'表名'

--7:获取数据库文件路径

select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('MDF',filename)>0
or
select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('LDF',filename)>0

--8:获取某一个表的基本信息

sp_MShelpcolumns N'表名'

--9:获取某一个表的主键、外键信息

exec sp_pkeys N'表名'

exec sp_fkeys    N'表名'

--10:判断某一个表是否存在某一列(字段)

if exists(select 1 from syscolumns where id=object_id(N'表名) and name=N'字段')
      print    N'存在'
else
      print    N'不存在'

下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。

DECLARE @sp_name nvarchar(400)
DECLARE @sp_content nvarchar(2000)
DECLARE @asbegin int
declare @now datetime
select @now = getdate()
DECLARE sp_cursor CURSOR FOR
SELECT object_name(id)
FROM sysobjects
WHERE xtype = 'P'
AND type = 'P'
AND crdate < @now
AND OBJECTPROPERTY(id, 'IsMSShipped')=0

OPEN sp_cursor

FETCH NEXT FROM sp_cursor
INTO @sp_name

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sp_content = text FROM syscomments WHERE id = OBJECT_ID(@sp_name)
SELECT @asbegin = PATINDEX ( '%AS' + char(13) + '%', @sp_content)
SELECT @sp_content = SUBSTRING(@sp_content, 1, @asbegin - 1)
+ ' WITH ENCRYPTION AS'
+ SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))
SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']'
EXEC sp_executesql @sp_name
EXEC sp_executesql @sp_content
FETCH NEXT FROM sp_cursor
INTO @sp_name
END

CLOSE sp_cursor
DEALLOCATE sp_cursor

该存储过程利用了 sysobjects 和 syscomments 表,并巧妙地修改了原存储过程的

SQL 定义语句,将 AS 修改为了 WITH ENCRYPTION AS,从而达到了加密存储过程的目

的。本存储过程在 SQL Server 2000 上通过。

相关文章:

  • 2021-12-17
  • 2022-12-23
  • 2022-02-21
  • 2022-12-23
  • 2021-11-23
  • 2021-07-11
  • 2022-12-23
  • 2022-03-03
猜你喜欢
  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案