SQLServer 实用语法大全
发布时间:2020-12-12 13:35:21 所属栏目:MsSql教程 来源:网络整理
导读:1、将表名作为参数的存储过程 eg: create proc s_Table_SearchInfo? @TableName nvarchar(100)? AS ? Begin declare @value nvarchar(50), ? ? ? ? ? ? ? ? @sql nvarchar(1000)? set @sql= ' select * from ' + @TableName? exec sp_executesql @sql,N'@val
1、将表名作为参数的存储过程
eg: create proc s_Table_SearchInfo? @TableName nvarchar(100)? AS ? Begin declare @value nvarchar(50), ? ? ? ? ? ? ? ? @sql nvarchar(1000)? set @sql= ' select * from ' + @TableName? exec sp_executesql @sql,N'@value ? int ? output ',@value output ?? select @value End GO 调用:存储过程名'表名' eg:s_Table_SearchInfo'StuInfo' 2、模糊查询(分页)的存储过程 alter proc SA_FuzzySearch @Name Nvarchar(20),43); font-family:Arial; font-size:14px; line-height:26px">@MaximumRows int,? @StartRowIndex int,43); font-family:Arial; font-size:14px; line-height:26px">@Type Nvarchar(20) AS? ? ? Begin ? ? declare @temp varchar(500) ? ? set @temp = 'Select Top ' + cast(@MaximumRows as varchar(2)) ? ? set @temp = @temp + ' * From SA Where SA_ID Not In (Select Top ' +cast(@StartRowIndex as varchar(2))+ ' SA_ID From SA Where SA_Name Like ' ? ? set @temp = @temp + '(''%'+ @Name +'%'') or SA_IsAdministrator like (''%'+ @Type +'%'') Order By SA_ID Desc) and SA_Name Like (''%'+ @Name +'%'') or SA_IsAdministrator like (''%'+ @Type +'%'') Order By SA_ID Desc' ? ? exec (@temp) ? ? End Go 3、判断一个数据库是否offline ?If EXISTS(select * From master.dbo.sysdatabases where name='dd' and status<>512) ? ? print '是' ?else ? ? print '否' 4、SQL Server中判断数据库对象是否存在: ? if EXISTS(select * from sys.databases where Name = 'ZHyry') ? ? ? BEGIN? ? ? ? ? print '存在' ? ? ? END ? ?ELSE ? ? ? BEGIN ? ? ? ? print '不存在' 5、SQL Server中判断表中字段是否存在: ? if exists(select * from syscolumns where name='colname1' and id=object_id('数据库名.Owner.表名')) print '存在' else print '不存在' 6、Access中判断表对象是否存在: Select Count(*) AS Qty FROM MSysObjects Where ((MSysObjects.Name) Like '表名'); ? ?? ? ?SQLServer中判断表是否存在: ? ? ? ??if EXISTS(select TOP 1 * from sys.objects o where o.type=N'U' AND o.name =N'ZHNews') --建立添加新信息的存储过程(s_DataDict) alter proc s_DataDict_InsertInfo @Name nvarchar(30),43); font-family:Arial; font-size:14px; line-height:26px">@CName nvarchar(30),43); font-family:Arial; font-size:14px; line-height:26px">@Time datetime ? ? --开始事务 Begin transaction ? ? --判断表是否存在 if exists(select * from sysobjects where Name = @Name) ? ? ? ? Begin ? ? ? ? --捕获错误信息 ? ? ? ? raiserror('该表已创建!',1,1) ? ? ? ? --回滚事务 ? ?rollback transaction ? ? ? ? End ? ? else ? ? ? ? Begin ? ? ? ? ? ? ? insert into s_DataDict values(newID(),@Name,@CName,@Time) ? ?--建立相应的子表 ? ? ? ? exec(' create table ' + @Name + '( ? ?Pid uniqueidentifier not null,43); font-family:Arial; font-size:14px; line-height:26px">? ? ? ? DataDictpid uniqueidentifier not null,43); font-family:Arial; font-size:14px; line-height:26px">? ?Name nvarchar(30) not null,43); font-family:Arial; font-size:14px; line-height:26px">? ?OrderMark int not null ? ?)')? ? ? ? ? --以及相应的主外键 ? ? ? ? exec(' alter table ' + @Name + ? ? ? ? ' add constraint constraint_' + @Name +? ? ? ? ? ' Foreign key (DataDictpid) ? ? ? ? references s_DataDict(Pid) ? ? ? ? ') ? ? ? ? --提交事务 ? ? ? ? commit transaction? ? ? ? ? End ? ? End ( 附加:查询赋值 ? ? ? ? ? ? ? declare @TName nvarchar(50) ? ? ? select @TName = TableName from s_DataDict where Pid = @ID ? ? ) 8、重命名数据库、表、列 a:alter database 数据库名 ? modify name = 新数据库名 b:exec sp_rename '旧表名','新表名' c:exec sp_rename '旧表名.旧列名','新表名.新列名' 9、删除字段值相同的ID大的数据 /* * distinct: 函数指如有多项相同只显示一项 * select * from 表 where 字段 in(select 字段 from 表 group by 字段 having count(1)>1):查询出项多次的数据 */ Declare @num int,@i int select @num = Count(s_Name) from s_Info group by s_Name having count(1)>1 set @i = 0 while @i <= @num Begin delete from s_Info where s_ID in(select Max(s_ID) from s_Info where s_Name in (select s_Name from s_Info group by s_Name having count(1) > 1)) set @i = @i + 1 10、查询重复的数据 select id,[name],次数 = count(*) from D? ? ? ? ?group by id,[name] having count(*) >= 2 ?* 查询不重复的信息 ? ?select id,[name] having count(*) = 1 ?*/? 11、查询数据库的所有表信息(包括系统表) ? ? select * from sysobjects? ?* 查询数据库的所有表信息(不包括系统表) ?* select * from sysobjects? ?* ? ? where xtype = 'u'? ?*/ 12、--复制表(已经存在,新表的结构必须和旧表结构相同) ? ? insert into OlerdTable select * from NewTable ? ? --复制表(不存在) ? ? select * into NewTable from OldTable 13、--本月第一天: ? ?select dateadd(dd,-day(getdate())+1,getdate()) ? ? ? ?--本月最后一天: ? ?--获取当前的星期数 ? ?select 星期 = datepart(WeekDay,getdate()-1) ? ?select 星期 = DateName(dw,getDate())? ? ?--时间函数大全 ? ?年 = DateName(year,GetDate()) ? ?月 = DateName(month,43); font-family:Arial; font-size:14px; line-height:26px">? ?日 = DateName(day,43); font-family:Arial; font-size:14px; line-height:26px">? ?星期 = DateName(dw,43); font-family:Arial; font-size:14px; line-height:26px">? ?周 = DateName(week,43); font-family:Arial; font-size:14px; line-height:26px">? ?时 = DateName(hour,GetDate() ? ?分 = DateName(minute,43); font-family:Arial; font-size:14px; line-height:26px">? ?秒 = DateName(second,GetDate())? ? ?毫秒 = DateName(millisecond,43); font-family:Arial; font-size:14px; line-height:26px">? ? 1.一个月第一天的 SELECT DATEADD(mm,DATEDIFF(mm,getdate()),0) 2.本周的星期一 SELECT DATEADD(wk,DATEDIFF(wk,43); font-family:Arial; font-size:14px; line-height:26px">? ? 扩展: ? ? ? ? SELECT DATEADD(wk,1)--周二 ? ? ? ? …… 3.一年的第一天 SELECT DATEADD(yy,DATEDIFF(yy,43); font-family:Arial; font-size:14px; line-height:26px"> 4.季度的第一天 SELECT DATEADD(qq,DATEDIFF(qq,43); font-family:Arial; font-size:14px; line-height:26px"> 5.当天的半夜 SELECT DATEADD(dd,DATEDIFF(dd,43); font-family:Arial; font-size:14px; line-height:26px"> 6.上个月的最后一天 SELECT dateadd(ms,-3,DATEADD(mm,0)) 7.去年的最后一天 8.本月的最后一天 9.本年的最后一天 10.本月的第一个星期一 select DATEADD(wk,dateadd(dd,6-datepart(day,getdate())),43); font-family:Arial; font-size:14px; line-height:26px">14、游标 ?* 声明游标: ?* DECLARE 游标名 CURSOR FOR T_SQL; ?* ?*打开游标: ?*OPEN 游标名 ?*关闭游标: ?*CLOSE 游标名 ?*删除游标: ?*DEALLOCATE 游标名 ?*游标读取数据: ?*FETCH NEXT FROM 游标名 ?*(或者)Fetch FIRST from 游标名 --声明游标 DECLARE deleteTable CURSOR FOR? SELECT ltrim(rtrim(NAME)) FROM Sysobjects WHERE NAME LIKE '%000079' --打开游标 OPEN deleteTable --关闭游标 CLOSE deleteTable --删除游标 DEALLOCATE deleteTable --读取数据 FETCH NEXT FROM deleteTable INTO @Value1,@Value2 --或则 Fetch first from mycursor --判断游标是否存在 deleteTable:游标名 if cursor_status('global','deleteTable')=-3 and cursor_status('local','deleteTable')=-3 ? ?print '不存在' else ? ?print '存在' CREATE PROC PROC_EA ? BEGIN ? ? ? ?DECLARE EAMCMT4 CURSOR FOR ? ? ? ?SELECT TOP 545 UserId,CreateTime FROM EA_MCMT4 ORDER BY CreateTime DESC ? ? ? ? ? ? ? ?DECLARE @UserId nchar(50),@DateTime smallDatetime,@Id int ? ? ? ?SET @Id = 560 ? ? ? ?OPEN EAMCMT4 ? ? ? ?WHILE @@FETCH_STATUS = 0 ? ? ? ?BEGIn ? FETCH NEXT FROM EAMCMT4 INTO @UserId,@DateTime ? UPDATE EA SET userId=@UserId,[DateTime]= @DateTime WHERE Id=@Id? ? SET @Id = @Id + 1 ? ? ? ?END ? ? ? ?CLOSE EAMCMT4 ? ? ? ?DEALLOCATE EAMCMT4 ? END GO ? --清空日志 DUMP TRANSACTION DBName WITH NO_LOG --收缩数据库文件 DBCC SHRINKFILE('dazhou_Log',43); font-family:Arial; font-size:14px; line-height:26px">?*由此推导出SQLserver分页语句 ?*pageSize: ?每页显示数据条数 ?*TableName:查询表名 ?*pageIndex:分页索引(默认为1,即首页) ?*pageCount: 总页数 IF pageIndex > 0 AND pageIndex <= pageCount ? ?BEGIN SELECT TOP pageSize * FROM TableName tn WHERE tn.ID NOT IN( ? SELECT TOP (pageIndex-1)*pageSize tn.ID FROM TableName tn ORDER BY tn.ID ASC) ? ORDER BY tn.ID ASC ? ?END ELSE ? ? ? ?SELECT TOP pageSize * FROM TableName ? ?END? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |