一、SQL存储过程使用

----重命名存储过程-S--

--sp_rename newProc,reNewProc

----重命名存储过程-E--

----删除存储过程-S--

--drop newProc1,newProc2 --删除多个存储过程

----删除存储过程-E--

----自定义存储过程3-S--

--Create Proc newProc

--@testName varchar(30) output

--as

--begin

--    select @testName=MAX(UserName) from T_User

--end

------调用存储过程

--declare @MaxName varchar(30)

--exec newProc @MaxName output

----exec newProc 'admin'

----自定义存储过程3-E--

----自定义存储过程2-S--

--Create Proc newProc

--@testName varchar(30)

--as

--begin

--    select * from T_User where UserName=@testName

--end

----调用存储过程

--exec newProc 'admin'

----自定义存储过程2-E--

----自定义存储过程1-S--

--Create Proc newProc

--@testVarA int,

--@testVarB int,

--@testSum int Output

--as

--begin

--    set @testSum=@testVarA+@testVarB

--end

----调用存储过程

--declare @testA int

--set @testA=0

--exec newProc 600,800,@testA output

--print @testA

----自定义存储过程1-E--

-----------系统存储过程-S-----------

----使用SQL语句改变数据库名称-S--

----修改数据库

--exec sp_renamedb dbName,daNewName

----修改数据库对象

--use D_Platforms

--exec sp_rename 'table1','newTable1'

----使用SQL语句改变数据库名称-E--

----使用SQL语句附加数据库-S--

--exec sp_attach_db @dbname='数据库名称',@filename1='文件路径'

----使用SQL语句附加数据库-E--

-----------系统存储过程-E-----------

二、SQL函数使用

----自定义函数使用-S--

--create Function test_functionA(@test_var int) returns int    --returns定义返回值类型

--as

--begin

--declare @sum int

--set @sum=@test_var*8

--return @sum

--end

--修改函数只需将create→alter

--print dbo.test_functionA(6000)    --使用自定义函数

----自定义函数使用-E--

----日期函数使用-S--

--declare @test_Var varchar(100)

--set @test_Var=GETDATE()

--print '当前系统长时间:'+@test_Var

--set @test_Var=CONVERT(varchar(30),YEAR(GETDATE()))+CONVERT(varchar(30),MONTH(GETDATE()))+CONVERT(varchar(30),DAY(GETDATE()))

--print  '当前系统日期:'+@test_Var

--set @test_Var=DATENAME(HOUR,GETDATE())+':'+DATENAME(MINUTE,GETDATE())+':'+DATENAME(SECOND,GETDATE())    --DATENAME函数,获取时间

--print '当前系统短时间:'+@test_Var

--set @test_Var=DATEPART(HOUR,GETDATE())    --DATEPART函数,获取时间

--print 'DATEPART小时:'+@test_Var

--set @test_Var=DATEADD(DAY,10,GETDATE())    --DATEADD函数,datetime类型向相加

--print 'DATEADD加10天后长时间:'+@test_Var

----日期函数使用-E--

----转换函数使用-S--

--declare @test_Var int

--set @test_Var=1000

--print 'Yes.'+CONVERT(varchar(30),@test_Var)    --参数1:系统指定的类型 参数2:需转换的参数

----转换函数使用-E--

----重复,反转,替换,空格函数使用-S--

--declare @test_String1 varchar(60),@test_String2 varchar(60)

--set @test_String1='hello'

--set @test_String2=REPLICATE(@test_String1,5)    --重复

--print 'REPLICATE输出结果为:'+@test_String2

--set @test_String2=REVERSE(@test_String1)    --反转

--print 'REVERSE输出结果为:'+@test_String2

--set @test_String2=REPLACE(@test_String1,'l','a')    --取代

--print 'REPLACE输出结果为:'+@test_String2

--set @test_String2=@test_String1+space(5)+'空格后的内容'    --空格

--print 'space输出结果为:'+@test_String2

--set @test_String2=STUFF(@test_String1,2,3,'替换内容')    --指定字符串长度替换

--print 'STUFF输出结果为:'+@test_String2

----重复,反转,替换,空格函数使用-E--

----去除尾部空格,截取函数使用-S--

--declare @test_String1 varchar(60),@test_String2 varchar(60)

--set @test_String1='hello world!     '

--set @test_String1=RTRIM(@test_String1)

--print '字符串为:'+@test_String1

--set @test_String2=LEFT(@test_String1,5)

--print 'LEFT截取后字符串为:'+@test_String2

--set @test_String2=RIGHT(@test_String1,5)

--print 'RIGHT截取后字符串为:'+@test_String2

--set @test_String2=SUBSTRING(@test_String1,2,6)

--print 'SUBSTRING截取后字符串为:'+@test_String2

----去除尾部空格函数使用-E--

----字符串长度函数使用-S--

--declare @test_Var int,@test_String varchar(60)

--set @test_String='Money:'

--set @test_Var=LEN(@test_String)

--print '字符串长度为:'+STR(@test_Var,1,0)

----字符串长度函数使用-E--

----数值转换字符函数使用-S--

--declare @test_Var float,@test_String varchar(60)

--set @test_Var=1000.2355

--set @test_String='Money:'

--print @test_String+STR(@test_Var,7,2) --参数1:要转换数值 参数2:长度 参数3:小数精确位

----数值转换字符函数使用-E--

--大小写函数使用-S--

declare @test_String1 varchar(30),@test_String2 varchar(30),@test_Result varchar(30)

set @test_String1='upper'

set @test_Result=UPPER(@test_String1)

print @test_Result

set @test_String2='Lower'

set @test_Result=LOWER(@test_String2)

print @test_Result

--大小写函数使用-E--

----ASCII码函数使用-S--

--declare @test_String1 char(60),@test_String2 varchar(60)

--set @test_String1='H'

--select 'H的ASCII码是:',ASCII('H')

--select 'SCII码72转字符是:',CHAR(72)

----ASCII码函数使用-E--

----正负判断函数使用-S--

--declare @test_Var1 float,@test_Var2 float,@test_String varchar(30)

--set @test_Var1=RAND()

--print @test_Var1

--set @test_Var2=SIGN(@test_Var1)

--set @test_String=

--    case

--        when @test_Var2=1 then '正值'

--        else '负值'

--    end

--print @test_String

----正负判断函数使用-E--

----取整函数使用-S--

--declare @test_Var float,@test_Value1 float,@test_Value2 float

--set @test_Var=86.3

--set @test_Value1=CEILING(@test_Var)

--select '>=86.3的最小整数',@test_Value1

--set @test_Value2=FLOOR(@test_Var)

--select '<=86.3的最大整数',@test_Value2

----取整函数使用-E--

----平方根函数使用-S--

--declare @test_Var float,@test_Value float

--set @test_Var=100

--set @test_Value=SQRT(@test_Var)

--select '100平方根值:',@test_Value

----平方根函数使用-E--

----三角(反三角)函数使用-S--

----(三角)sin,cos,tan,cot类似,以sin为例

----(反三角)asin,acos,atan

--declare @test_Var float,@test_Value float

--set @test_Var=60

--set @test_Value=SIN(@test_Var)

--select '60弧度角sin值:',@test_Value

----三角(反三角)函数使用-E--

三、SQL游标的使用

----游标的使用-S--

----创建游标

--use EPS_LOB_Web

--declare testCursorB cursor scroll for

--select * from T_Test1

----打开游标

--open testCursorB

----查看游标(每次查找下一行数据)

--fetch next from testCursorB

----从后往前读

--fetch prior from testCursorB

----转向第一条(不能和只进游标一起使用[read only])

--fetch first from testCursorB

----转向第一条(不能和只进游标一起使用[read only])

--fetch last from testCursorB

----跳转到具体的某行

--fetch absolute 2 from testCursorB

----相对目前位置,向前为+,向后为-

--fetch relative 1 from testCursorB

----将提前的记录存取在变量中

--declare @testVar1 int,@testVar2 varchar(100),@testVar3 varchar(100),@testVar4 varchar(100)

--fetch relative 1 from testCursorB into @testVar1,@testVar2,@testVar3,@testVar4

--print convert(varchar(10),@testVar1) + @testVar2 +@testVar3 + @testVar4

----关闭游标

--close testCursorB

----释放游标

--deallocate testCursorA

----游标的使用-E--

四、SQL触发器的使用

----使用触发器中代码代替删除操作-S--

--create trigger testInsteadTriggerA on T_Test1 instead of delete as

--begin

-- print '替代触发器被调用'

--end

----测试替代触发器

--delete from T_Test1 where SerialNo=11

----使用触发器中代码代替删除操作-E--

----取消触发器执行顺序-S--

--sp_settriggerorder @triggername='testTriggerC',@order='none',@stmttype='insert'

----取消触发器执行顺序-S--

----定义触发器执行顺序-S--

--定义testTriggerC为第一个顺序

--sp_settriggerorder @triggername='testTriggerC',@order='first',@stmttype='insert'

--定义testTriggerA为最后一个顺序

--sp_settriggerorder @triggername='testTriggerA',@order='last',@stmttype='insert'

----定义触发器执行顺序-S--

----创建更新触发器-S--

--create trigger testTriggerB on T_Test1 for update as

----for Insert表示对表进行插入时触发

--begin

-- print '更新触发器被调用'

--end

----测试触发器

--update T_Test1 set Path='http://www.domi.com' where SerialNo=11

--select * from T_Test1

----创建更新触发器-E--

----创建插入触发器-S--

--create trigger testTriggerA on T_Test1 for Insert as

----for Insert表示对表进行插入时触发

--begin

-- print 'testTriggerC触发器被调用'

--end

----测试触发器

--insert into T_Test1 values('音乐','多米','www.domi.com')

--select * from T_Test1

----创建插入触发器-E--

--删除触发器... delete触发器以此类推 0_0

----利用触发器在两张表中同时插入数据-S--

----创建触发器

--create trigger triggerTestInsertA on T_Test1 for insert as

--begin

-- insert into T_Test2 values('7','8')

--end

----测试

--insert into T_Test1 values('音乐','酷我','http://www.kuwo.com')

--select * from T_Test1

--select * from T_Test2

----删除测试数据

--delete from T_Test1 where SerialNo=12

--delete from T_Test2 where ID=10

----释放替代触发器

--drop trigger triggerTestInsertA

----利用触发器在两张表中同时插入数据-E--

----修改触发器-S--

--alter trigger testTriggerA on T_Test1 for Insert as

--begin

-- print 'testTriggerA触发器修改后被调用'

--end

----修改触发器-E--

--查看触发器基本信息-S--

exec sp_help testTriggerA

--查看触发器基本信息-E--

--查看触发器完整代码-S--

exec sp_helptext testTriggerA

--查看触发器完整代码-E--

五、SQL高级用法

数据库操作:

1.SQL数据库,在存储过程中执行其他存储过程

--删除5天之前的工单

exec Proc_DelWorkorderBeforeDay5

2.数据库定期删除逾时数据

BEGIN

--删除100天之前的料表

delete from T_Component where WorkOrderID in (select SerialNo from T_WorkOrder where AddDate < dateadd(dd,-100,getdate()))

--删除100天之前的工单

delete from T_WorkOrder where AddDate < dateadd(dd,-100,getdate())

--删除100天之前的临时表(记录DIP的状态)

delete from T_RecordResult_DIP where WorkOrderID in (select SerialNo from T_WorkOrder where AddDate < dateadd(dd,-100,getdate()))

END

3.--查询工单是否存在,若不存在,则写入机种ID,并返回1

select @workorderID=SerialNo from T_WorkOrder where WorkOrder=@Workorder

if(ISNULL(@workorderID,0) = 0)

begin

--工单不存在,写入工单和机种ID

insert into T_WorkOrder(WorkOrder,ModelID) values(@Workorder,@ModelID);

set @Result = 1;

return @Result;

end

{提示:ISNULL(列名,0)函数是用来判断列名是否为null,如果为NUll,则返回0. 否则,返回列名的值}

4.根据变量来修改数据表中的值

--更改BOM比对结果

update T_WorkOrder set Result_BOM=(case when @Result=1 then @Result else '-1' end) where SerialNo=@workorderID;

以下在学习SQL过程中遇到的问题(逐步更新)

1.     UNION的用法

——UNION指令的目的是将两个 SQL 语句的结果合并起来。从这个角度看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。union只是将两个结果联结起来一起显示,并不是联结两个表………… UNION 的语法如下:

[SQL 语句 1]

UNION

[SQL 语句 2]

注意,UNION内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条SELECT 语句中的列的顺序必须相同。

与UNIONALL的区别,UNIONALL会显示合并后的所有列,而UNION则不会。

2.     如何将两个表中相同类型的列联结起来一起显示,并去掉重复列

——selectComponent from T_BOM_M as M (推荐使用)

union

select S.Component from T_BOM_M as M, T_BOM_S as S

select M.Component from T_BOM_M as M, T_BOM_S as S

union

select S.Component from T_BOM_Mas M, T_BOM_S as S

3.     怎样对多表连接之后的新表进行操作

——利用AS给新表起个别名,再进行操作

4.     存储过程的新建,不要使用反编译脚本生成,应该使用新建一个查询写代码,因为在反编译的文件中,误操作可能会修改文件的内容,导致使用了改存储过程的应用程序无法正常使用。

5.     关于给存储过程传参的问题

——a.存储过程默认参数传输方向是Input,若要返回值,需设置参数为Output

传入参数:cmd.Parameters.Add(newOleDbParameter("@MainPN", OleDbType.VarChar)).Value = strMainPN;

传出参数:cmd.Parameters.Add(newOleDbParameter("@Result", OleDbType.VarChar,1024)).Direction =ParameterDirection.Output;

b.接收存储过程返回的值

cmd.ExecuteNonQuery();

strSubPN =cmd.Parameters["@Result"].Value.ToString();

6.删除表中重复列(利用临时表)

——selectdistinct * into #tmp from T_User

Delete* from T_User

Insertinto T_User select * from #tmp

SQLServer存储过程知识点整合相关推荐

  1. SQLSERVER存储过程基本语法

    一.定义变量 --简单赋值 declare @a int set @a=5 print @a   --使用select语句赋值 declare @user1 nvarchar(50) select @ ...

  2. 网络工作室暑假后第二次培训资料(SQLServer存储过程和ADO.NET访问存储过程)整理(一)...

    因为昨天我的SQL Server 2008数据库在使用的时候突然就打不开了.而起前天还用它来写T-SQL语句来着.所以很是郁闷啊,到网上查询以后,不能解决,就干脆重新安装了一边,所以昨天整理的内容不能 ...

  3. PHP写sqlserver事务,php调用sqlserver存储过程使用事务处理

    第一次编写 sqlserver存储过程并在php里调用,把脑瓜都整大了,奋战了一天多最后还是搞定了. 实现功能:在 sqlserver里面实现事务处理,保证数据库操作安全: 接收sqlserver存储 ...

  4. python获取数据库的存储过程_python远程调用sqlserver存储过程记录

    开发中需要python远程调用sqlserver存储过程.搜索了网上有两种方式,pymssql和pyodbc.开始采用第一种方式开发,不过无法拿到存储过程中的返回数据,后采用pyodbc开发,当然存储 ...

  5. java调用存储过程sqlserver_Java调用SqlServer存储过程怎么实现 | 学步园

    在使用Java开发时,经常会遇到调用SqlServer存储过程的问题.下面学步园小编来讲解下Java调用SqlServer存储过程怎么实现? Java调用SqlServer存储过程怎么实现 1.数据库 ...

  6. 破解SQLSERVER存储过程的加密

    破解SQLSERVER存储过程的加密 http://download.csdn.net/detail/liujiayu2/8620519

  7. sqlserver存储过程入门之 游标

    1.游标是SQL的一个内存工作区,由系统或用户以变量的形式定义. 以下是基本步伐: 不懂的问我 定义,打开 ,使用,关闭,释放 DECLARE @temp VARCHAR(12) -- 临时变量 de ...

  8. sqlserver存储过程入门?看不懂打死我

    sqlserver存储过程入门 1.工具 2.基础知识 游标 DECLARE 赋值 set 赋值 into if else 代替 REPLACE CASE WHEN CONCAT 函数 字符串连接 B ...

  9. SQL Server -- SQLserver 存储过程执行错误记录到表

    SQLserver 存储过程执行错误记录到表    From: http://blog.csdn.net/leshami/article/details/51333650 对于在执行存储过程中碰到的一 ...

最新文章

  1. linux 安装jdk yum安装 源码包安装
  2. OkHttp3 websocket
  3. [云炬学英语]每日一句2020.9.5
  4. visio网络拓扑图_人才测评模型是什么?5步了解好看模型图
  5. 分页 Paginator
  6. 程序设计用户生日怎么发推送_生日祝福:儿子生日怎么发朋友圈说说 儿子生日怎么写祝福语...
  7. 强大的Mockito测试框架
  8. python 获取内存使用率_获取一个python实例的总内存和cpu使用率
  9. android 自定义取色器,Android Studio设置颜色拾色器工具Color Picker教程
  10. 放弃OneNote,拥抱 Obsidian
  11. css中的flow-root属性
  12. 第三方登录数据库用户表结构设计
  13. 为什么被证明“拖后腿”的苹果Mini手机,仍然还会再次发布新款?
  14. mysql单元组多元组_CDA数据分析师-数据分析练习题2套
  15. 五万字总结,深度学习基础。
  16. render方法的使用
  17. 成就感和尊严,给你快乐
  18. 电磁波传播相位是否会变化,关于电磁波的相位不变性和多普勒效应的讨论
  19. Int里-128到127的学问
  20. C++四个数排序(从小到大)

热门文章

  1. 编译Android源码,执行lunch命令时报错“No such file: /root/.lunchrc”的解决办法
  2. 微信小程序云开发操作全解
  3. excel转word_pdf转word软件永久jpg图片ppt转换excel编辑器压缩合并拆分去水印,加入自律圈即可获得!!!...
  4. 计算机毕业设计ssm动漫交流与推荐分析系统633g7系统+程序+源码+lw+远程部署
  5. 2022年旅游网站开发功能分析、开发意义在哪
  6. 锐角三角函数怎么用计算机算,锐角三角函数:运用计算器
  7. c32循迹小车c语言程序,stm32篇--小车循迹
  8. BugkuCTF-Crypto题python_jail
  9. 绿色版本ps cs5 不能复制汉字【解决方法】
  10. 无人机路径规划1:orbslam2+VIO