sqlserver常用语法大全

查看锁表

SELECT request_session_id spid,OBJECT_NAME(resource_associated_entity_id)tableName 
FROM sys.dm_tran_locks 
WHERE resource_type='OBJECT '

不锁表查询

select * from TBW_PTProductactivity WITH(NOLOCK)

单独解锁

exec('kill 64')  --64 spid

查看存储过程,触发器,视图的内容

exec sp_helptext 'sp_Api_BackCharging'

查看相关依赖关系

exec sp_depends 'Accounts_Users'

查看sysobjects 表中的内容

select * from sysobjects where xtype='TR'--触发器
select * from sysobjects where xtype='v'--视图
select * from sysobjects where xtype='p'--存储过程
select * from sysobjects where xtype='s'--系统表
select * from sysobjects where xtype='fn' --标量函数
select * from sysobjects where xtype='tf'--表函数

获取字符切割

declare @str nvarchar(30)  
set @str='12|箱' 
print substring (@str,1, charindex ('|',@str)-1)  --输出数量12  
print substring (@str, charindex ('|',@str)+1,len(@str)-charindex ('|',@str)) --输出箱  

declare @ProductUnits nvarchar (20) 
set @ProductUnits='1|盒,10|箱'
print substring (@ProductUnits,charindex(',',@ProductUnits)+1,len(@ProductUnits)-charindex(',',@ProductUnits))
输出 10|

使用遍历方法操作数据:

DECLARE 
@A1 VARCHAR(10),
@A2 VARCHAR(10),
@A3 INT
DECLARE YOUCURNAME CURSOR FOR SELECT ProductId, Id,Qty  FROM TBBrandLevelUpGiving 
OPEN YOUCURNAME 
fetch next from youcurname into @a1,@a2,@a3 
while @@fetch_status<>-1
 begin 
--您要执行的操作写在这里 
print @a1
fetch next from youcurname into @a1,@a2,@a3 
end 
close youcurname 
deallocate youcurname

使用临时表

declare @tableTop table(
			Id int,
			Amount decimal(12,2)
		)
		insert into @tableTop select * from TBTopUpSet where Amount>1
		select * from  @tableTop

动态分页加参数查询
1

ALTER PROCEDURE [dbo].[Test]
@flag int,
@inorout int
AS
BEGIN
SELECT * FROM Demo 
where 1 = 1
and ((@flag IS NULL) or (flag=@flag) or @flag = '')
and ((@id IS NULL) or (id=@id) or @id= '')
END
@flag是传入的参数

so…如果要启用id作为查询条件,就传入一个非null的值,否则就是不启用id作为查询条件,这就是传说中的动态查询

2

select
*
from(select *,rn= ROW_NUMBER() over(order by ApplyTime) from 
TBCustomer)as T2 
where T2.rn between (@Page-1)*@Rows+1 and @Rows*@Page order by ID desc

随机获取表中一条数据

SET STATISTICS TIME ON 
SET STATISTICS IO ON
SELECT TOP 1 vspCusid  FROM    TB_Api_VspCusid where State=2
GROUP BY vspCusid
ORDER BY NEWID() 
SET STATISTICS TIME OFF
SET STATISTICS IO OFF

根据逗号拆分,返回临时表

create FUNCTION [dbo].[func_split](@str nvarchar(4000),@separtor varchar(10))   
  returns @temp table([row] [int] IDENTITY(1,1) NOT NULL,valuess nvarchar(4000))   
  as    
begin  
   declare @i int  
   set  @str=rtrim(ltrim(@str))   
   set  @i=charindex(@separtor,@str)   
   while   @i>=1   
    begin  
     insert   @temp   values(left(@str,@i-1))   
     set  @str=substring(@str,@i+1,len(@str)-@i)   
     set  @i=charindex(@separtor,@str)   
    end  
    if @str<>''    
    insert @temp values(@str)   
    return    
end

使用方法:
select * from  dbo.func_split('1,2,3,4,5,7', ',')

动态条件查询为空或者是空字符串处理

and (@State is null or A.State=@State)
and isnull(AuthCode,'') like (case when isnull(@AuthCode,'') = '' then isnull(AuthCode,'') else '%'+@AuthCode+'%' end)
		and isnull(Name,'') = (case when isnull(@Name,'') = '' then isnull(Name,'') else @Name end)
		and isnull(ApplyTime,'') >= (case when isnull(@BeginTime,'') = '' then isnull(ApplyTime,'') else convert(datetime,@BeginTime) end)
	    and isnull(ApplyTime,'') <= (case when isnull(@EndTime,'') = '' then isnull(ApplyTime,'') else convert(datetime,@EndTime) end)

使用事务

BEGIN TRAN
pritn '在这里执行需要回滚的操作'
**ROLLBACK TRAN**
--------------------------------
BEGIN
	set @Message=''
    SET NOCOUNT ON;

    BEGIN TRY---------------------开始捕捉异常
       BEGIN TRAN------------------开始事务
        UPDATE A SET A.names = B.names FROM T1 AS A INNER JOIN T2 AS B ON A.id = B.id

        UPDATE A SET A.names = B.names FROM T1 AS A INNER JOIN T2 AS B ON A.TEST = B.TEST

    COMMIT TRAN -------提交事务
    END TRY-----------结束捕捉异常
    BEGIN CATCH------------有异常被捕获
        IF @@TRANCOUNT > 0---------------判断有没有事务
        BEGIN
            ROLLBACK TRAN----------回滚事务
        END 
        set @Message='绑定出现问题'-----------记录存储过程执行时的错误信息,自定义
    END CATCH--------结束异常处理
END

获取随机数

DECLARE @NumBegin Int=1    --随机数的最小值 
DECLARE @NumEnd Int=100     --随机数的最大值 
DECLARE @Decimal Int=0      --保留小数点几位 
SELECT @NumBegin+round((@NumEnd-@NumBegin)*rand(),@Decimal)

整个库检索某个字段(返回表、对应的列)

declare @Str nvarchar(max), @tableName varchar(50), @colName varchar(50), @rowCount int

select a.name tableName, b.name Colname, 0 as IsFound into #t1
from sysobjects a join syscolumns b on a.id=b.id join systypes c on b.xtype=c.xtype
where a.[type]='U' and c.name in ('varchar', 'nvarchar', 'char', 'nchar') --这里是设置字段的类型,以缩小范围

declare _c1 cursor for select Colname, tableName from #t1
open _c1
fetch next from _c1 into @colName, @tableName
while @@FETCH_STATUS=0 begin
--print @Str
	select @Str='select @rowCount=count(1) from ['+@tableName+'] where ['+@colName+'] like ''%售后反馈模板%''' --这里是要查找的内容
	exec sp_executesql @Str, N'@rowCount int output', @rowCount output
	if @rowCount>0 update #t1 set IsFound=1 where ColName=@colName and tableName=@tableName
fetch next from _c1 into @colName, @tableName
end
close _c1
deallocate _c1
select * from #t1 where IsFound=1
drop table #t1

导出所有表和字段说明:
1\、执行下面的SQL,
2\、然后选择所有、
3\、另存为XXX

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='OrderInfo'    --如果只查询指定表,加上此条件
 Order By
     A.id,A.colorder

根据日期统计订单数

select 
	   SUBSTRING(CONVERT(varchar(100),WorkDate,120),1,4),
       SUBSTRING(CONVERT(varchar(100), WorkDate, 120),7,4) 日期,
       count(ID) 订单量
from TBCustomerOrder
where 
WorkDate>='2020-06-02 00:00:00'
and  WorkDate<='2020-07-02 00:00:00'
group by SUBSTRING(CONVERT(varchar(100),WorkDate,120),1,4),
		SUBSTRING(CONVERT(varchar(100), WorkDate, 120),7,4)
order by

结果显示
在这里插入图片描述

**cast和convert的用法和区别**
用法:
select CAST('123' as int)   -- 123
select CONVERT(int, '123')  -- 123
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250 
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 
区别
CAST和CONVERT比较
(1)cast一般更容易使用,convert的优点是可以格式化日期和数值;
(2)convert一般用于日期和时间值,小数之间转换,cast一般用于小数转数值和字符型;
(3)converk显示转换,cast是强制转换;    

递归

RETURN 
(
 WITH NODES     
 AS (   
 SELECT * FROM DBO.TBCustomerBrand par  WITH (NOLOCK) WHERE par.Customer_ID=@Customer_ID  and Brand_ID=@Brand_ID
 UNION ALL     
 SELECT child.* FROM TBCustomerBrand AS child  WITH (NOLOCK) INNER JOIN   
  NODES  AS RC ON child.Brand_ParentId = RC.Customer_ID where child.Brand_ID=@Brand_ID)    
  --SELECT ID FROM TBCustomerBrand WHERE Customer_ID IN (SELECT Customer_ID  FROM NODES N )  and Brand_ID=@Brand_ID 
  --SELECT ID  FROM NODES N
  SELECT ID FROM TBCustomerBrand  WITH (NOLOCK) WHERE ID IN (SELECT ID  FROM NODES N  WITH (NOLOCK) )  
)

获取生成的ID

@@identity :返回当前会话最后一个标识值,不限于特定的作用域 ;
ident_current('tablename'):返回任何会话,任何作用域中的指定表中生成的
最后一个标识值 ;
scope_identity :返回当前会话当前作用域任何表生成的最后一个标识值 。

创建聚合函数,拼接字符串

CREATE AGGREGATE [dbo].[hy_joinstr]
(@input [nvarchar](200))
RETURNS[nvarchar](max)
EXTERNAL NAME [MyAgg].[hy_joinstr]
GO
查看表里面某个字段是否包含另一张表某个字符串

s表 字符串
t表 字符串集
查看t表是否包含s表某个字符串

declare @u_id   varchar(100)    --所包含的字符串
	SELECT   
                   (SELECT   COUNT(*)
                     FROM      dbo.s
                     WHERE   (CHARINDEX(CONVERT(varchar(100), t.id), t.idlist) > 0)) 
       FROM      dbo.t   AS t   where t.id=@u_id
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SQL Server语法大全是一本包含SQL Server数据库查询和操作的语法手册,它提供了SQL Server中各种语句和函数的详细说明和示例。该手册可以帮助开发人员了解和使用SQL Server数据库的各种功能。 在SQL Server语法大全中,我们可以学习到如何创建数据库、表和视图,以及如何插入、更新和删除数据。它还提供了查询数据的各种语句,如SELECT语句和JOIN语句,以及聚合函数和排序函数的使用方法。 此外,SQL Server语法大全还介绍了事务的概念和使用方法,以及如何进行备份和恢复数据库。它还包含了索引、约束和触发器等高级特性的使用方法,可以帮助我们优化数据库的性能和安全性。 无论是初学者还是有一定经验的开发人员,SQL Server语法大全都是一个很好的参考资源。通过学习和熟悉其中的语法,我们可以更加高效地使用SQL Server数据库进行开发和管理。 总而言之,SQL Server语法大全是一本重要的参考手册,它详细介绍了SQL Server数据库的各种语法和功能。无论是学习SQL Server还是提高数据库开发技能,都可以从中受益。 ### 回答2: SQL Server是一种关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据库管理和操作。SQL Server语法大全PDF是指包含了SQL Server中所有合法语法和命令的文档,方便用户在使用SQL Server时快速查询和使用。 SQL Server语法大全PDF通常会包括以下内容: 1. SQL语言基础:包括SQL查询语句的基本语法、操作符、函数等。 2. 数据库和表的管理:包括数据库的创建、删除、备份、还原等操作,以及表的创建、修改、删除、索引等操作。 3. 数据查询:包括选择数据、过滤数据、排序数据、分组数据等操作。 4. 数据操作:包括数据的插入、更新、删除等操作。 5. 连接和合并表:包括连接多个表进行数据查询、合并等操作。 6. 数据约束:包括主键、外键、唯一约束、检查约束等。 7. 视图的使用:包括创建、修改、删除视图,以及使用视图查询数据。 8. 存储过程和触发器:包括创建、修改、删除存储过程和触发器,以及使用它们处理数据。 9. 数据类型:包括SQL Server支持的数据类型和数据类型转换。 10. 错误处理:包括处理SQL语句执行中可能出现的错误。 SQL Server语法大全PDF可以作为SQL Server的参考手册,帮助用户快速查找和学习SQL Server中的各种语法和命令。对于SQL Server开发人员和数据库管理员来说,熟练掌握SQL Server的语法是非常重要的,而SQL Server语法大全PDF就是一个很好的学习和查询工具。 ### 回答3: 《SQL Server语法大全.pdf》是一本详细介绍SQL Server数据库管理系统中各种语法的电子书籍。这本书对SQL Server中的各个方面进行了全面的讲解,使读者能够深入了解和掌握SQL Server的语法规则和应用技巧。 《SQL Server语法大全.pdf》的内容包括: 1. SQL Server的基本语法介绍:包括SQL语句结构、SQL Server的数据类型、创建和管理表等基础内容。 2. 数据查询和过滤:介绍了SQL Server中用于查询和过滤数据的SELECT语句以及常用的聚合函数和条件表达式的使用方法。 3. 数据操作和管理:包括插入、更新和删除数据的SQL语句的使用方法,以及如何创建和管理数据库、表和索引等。 4. 数据库事务和并发控制:讲解了SQL Server的事务处理机制和并发控制策略,以及如何使用事务和锁定来确保数据的完整性和一致性。 5. 存储过程和触发器:介绍了SQL Server中存储过程和触发器的定义和使用方法,以及如何利用它们来编写复杂的数据操作和业务逻辑。 6. 查询优化和性能调优:讲解了SQL Server中的查询优化技术和性能调优策略,以及如何通过索引、统计信息和查询计划来优化查询性能。 总之,《SQL Server语法大全.pdf》是一本非常实用的参考书,适用于所有希望学习和掌握SQL Server语法的数据库开发人员和管理员。无论是初学者还是有一定经验的人士,都能从中获得有关SQL Server的相关知识和技能。该书的详细内容和清晰的示例可以帮助读者更好地理解和应用SQL Server的语法规则,提高数据库管理和开发的效率和质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值