加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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')
? ? ? ? ?print '存在'
? ? ? else
? ? ? ? ?print '不存在'?
? ? ? --或者 ? ?
? ? ? if EXISTS(SELECT TOP 1 * FROM sys.tables t WHERE t.type =N'U' AND t.name =N'Trade')
? ? ? ? ? print '存在'
? ? ? else
? ? ? ? ?print '不存在'??

7、事务
--建立添加新信息的存储过程(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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读