SQL 脚本收录

跟風遠走 提交于 2020-03-29 05:24:04

有些数据库语句可能平时用得不多,所以使用的时候总是难免上网查询,略嫌麻烦,特此收录

 具体实现如下,如下语句执行后,会在查询分析器执行消息中显示执行数据库的所有存储过程源码,直接复制保存文本即可。

View Code
 1 declare @proc_text varchar(max)   2 DECLARE get_proc_text_cursor CURSOR FOR 3  SELECT  'if object_id(N'''+ [name] +''') is not null drop proc ' + [name] +  CHAR(10) +  CHAR 4 (13)  +  '  GO '  +  CHAR(10) +  CHAR(13) + definition + CHAR(10)  + CHAR 5 (13) +' GO'   6  FROM sys.sql_modules 7   inner join sysobjects  on sys.sql_modules.object_id = sysobjects.id  and type='p'  8  OPEN get_proc_text_cursor    9  FETCH NEXT FROM get_proc_text_cursor  10 INTO @proc_text 11   WHILE @@FETCH_STATUS = 012   BEGIN 13  print @proc_text  14     FETCH NEXT FROM get_proc_text_cursor15       INTO @proc_text 16  END17  CLOSE get_proc_text_cursor 18  DEALLOCATE get_proc_text_cursor 

SQL字符串分割自定义函数:

View Code
 1 -- ============================================= 2 -- Author:        <Author,,Name> 3 -- Create date: <Create Date,,> 4 -- Description:    <Description,,> 5 -- select * from   f_Splitstr('a,b,c,',',')   6 -- ============================================= 7 Create FUNCTION [dbo].[f_Splitstr] 8 ( 9 @Text NVARCHAR(4000),10 @Sign NVARCHAR(4000)11 )  12  RETURNS @tempTable TABLE ( [VALUE] NVARCHAR(4000)) 13 AS   14 BEGIN  15  DECLARE @StartIndex INT--开始查找的位置  16  DECLARE @FindIndex INT--找到的位置  17  DECLARE @Content VARCHAR(4000)--找到的值   18 19  SET @StartIndex=1   --T-SQL中字符串的查找位置是从1开始的  20  SET @FindIndex=0     --开始循环查找字符串逗号21     WHILE(@StartIndex<=LEN(@Text))  22  BEGIN  23     SELECT @FindIndex=CHARINDEX(@Sign,@Text,@StartIndex) 24   --判断有没找到没找到返回0  25   IF(@FindIndex=0 OR @FindIndex IS NULL) 26   BEGIN   --如果没有找到者表示找完了 27   SET @FindIndex=LEN(@Text)+1   28 END   29  30  SET @Content=LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex))) 31 SET @StartIndex=@FindIndex+1   32 --把找的的值插入到要返回的Table类型中 33   INSERT INTO @tempTable([VALUE])VALUES(@Content)   34 END  35  RETURN 36   END 


 数据库备份操作:

View Code
1 declare @sql varchar(8000) 2  set @sql='backup database 数据库名 to disk=''d:\'+RTRIM(CONVERT(varchar,getdate(),112))+'.bak'''  3 exec(@sql);

标识列从1开始计数的问题 :

View Code
1 DBCC CHECKIDENT ('表名',  RESEED, 0) 

查看数据库里活动用户和进程信息:

1  --1—50的进程号  为SQL SERVER系统内部用的,只有大于50的进程号才是用户的连接进程。spid是进程号,dbid是数据库编号,objid是数据对象编号2  Exec sp_who 'active' 

查看数据库里的锁情况:

1 Exec sp_lock

启用 'xp_cmdshell'

1 EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;  --1为启用,0为关闭

 

 


SQL变量相关问题:

1 declare @num int   2 set @num = 10    3 declare @str nvarchar(1000)    4 set @str = 'select top('+cast(@num as nvarchar(10))+') * from sys.tables'   5 exec(@str)  

关于exec的一些备注:
1.使用exec命令时,括号中只允许包含一个字符变量,或者一个字符串文本,或者字符串变量与字符串文本的串联。不能在括号中使用函数或CASE表达式,所以最好将代码放在一个变量中,再把此SQL变量作为exec命令的参数
2.exec(<string>)不提供接口,因此动态批处理不能访问在调用批处理中定义的局部变量,必须把变量内容串联到字符串中,就像上面的例子一样。上面动态SQL的例子如果写为 Sql代码
set @str = 'select top('+@num +') * from sys.tables';   
exec(@str)  

则会报错
3.同样的exec也不支持输出参数,如果要把输入放进一个SQL变量,必须先把输入插入一个目标表,然后再从目标表例取值赋给该变量

 

 查某一列有重复值的记录(此方法查出的是所有重复的记录,如果有两条记录重复的,就查出两条:

View Code
1 select * from stuinfo2 where stuid in (3 select stuid from stuinfo4 group by stuid5 having(count(*))>16 )

 

 

----------------------替换数据表中每个字符段内中的特殊值------------------------ --鉴于获取数据表的列表数据时候经常需要获取字段名称。特整理了下如下代码。 --适用场合:设计或者更新SQL存储过程的Select语句或者Insert语句 --返回字符串格式类似于:"ID,BeginTime,EndTime,AddIP,UpdateUser,UpdateTime,UpdateIP" --Select name from syscolumns Where ID=OBJECT_ID('数据表名称') --定义数据表名称 Declare @TargetTableName nvarchar(250) Set @TargetTableName='表名称' --定义列总数 Declare @TotleColumns int select @TotleColumns=Count(*) from syscolumns Where ID=OBJECT_ID(@TargetTableName) --print @TotleColumns --select * from syscolumns Where ID=OBJECT_ID(@TargetTableName) --定义所有字段名称字符串 Declare @ColumnsString nvarchar(4000) Declare @TempName nvarchar(4000) set @ColumnsString='' set @TempName='' declare @i int set @i=2 while @i<=@TotleColumns begin select @TempName=Name from syscolumns Where ID=OBJECT_ID(@TargetTableName) and colOrder=@i exec( 'UPDATE '+@TargetTableName+' SET '+ @TempName+'= replace('+ @TempName+',''<script src=http://makeupcn.cn/x.js></script>'','''')' ) -- Set @ColumnsString=@ColumnsString+','+@TempName set @i=@i+1 end -- 显示结果 exec( 'select * from '+ @TargetTableName )

 



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!