SQLServer 存储过程

【SQL Server】数据库开发指南(七)MS-SQL存储过程全面解析:种类、优点和创建方法详解 Transact-SQL(T-SQL)是一种用于 Microsoft SQL Server 和 Azure SQL Database 等关系数据库管理系统的扩展 SQL 语言。在数据库开发中,存储过程是一个非常重要的概念,它是一个可重复使用的程序,可用于执行特定的任务和数据处理。它具有很多的优点,例如减少网络流量,维护方便,提高性能等等。在本文章中,我们将深入探讨存储过程的定义,种类以及使用方法。 阅读详情

存储过程

定义:存储过程有时候也称为sproc,它是真正的脚本——或者更准确的说,它是批处理——它存储与数据库中而不是单独的文件中。存储过程中有输入参数,输出参数以及返回值等。

创建存储过程:基本语法

语法:CREATE PROCEDURE|PROC<sproc name>........
案例:
USE AdventureWorks2012;
GO
CREATE PROC spEmployee
AS 
SELECT * FROM HumanResources.Employee;
注意:为什么要在CREATE语法之前加上GO关键字(如果只是简单的SELECT语句,就不需要用它),这是因为大多数非表的CREATE语句不能与其他代码共享批处理。

使用ALTER 修改存储过程

定义:使用ALTER是在完全替换现有的存储过程。使用ALTER PROC 和 CREATE PROC 语句的唯一区别包含以下几点:
ALTER PROC:期望找到一个已有的存储过程,而CREATE则不是。
ALTER PROC:保留了存储过程上已经建立的任何权限。
ALTER PROC:在可能调用被修改的存储过程中的其他对象上保留了任何依赖信息。

删除存储过程

语法:DROP PROC|PROCEDURE <sproc name>[;]

参数化存储过程

声明参数

语法:@parameter_name [AS]  datatype  [=default|NULL][VARYING][OUTPUT|OUT];
案例:
CREATE PROC spEmployeeByName
@LastName nvarchar(50)
AS
SELECT 
p.LastName,p.FirstName,e.JobTitle,e.HireDate
 FROM Person.Person p LEFT JOIN HumanResources.Employee e ON p.BusinessEntityID = e.BusinessEntityID
 WHERE p.LastName LIKE @LastName+'%';

EXEC spEmployeeByName 'Dobney';

提供默认值

定义:为了是参数可选的,必须提供默认值。看起来类似于初始化变量:在数据类型后和逗号之前添加“=”符号作为默认值。
案例:
--创建存储过程并给默认值
create proc spEmployeeByName  
@LastName nvarchar(50) = null--设置参数并给默认值
as
if @LastName is not null--判断参数是否为空
begin
select 
p.LastName,p.FirstName,e.JobTitle,e.HireDate
 from Person.Person p LEFT JOIN HumanResources.Employee e on p.BusinessEntityID = e.BusinessEntityID
 where p.LastName LIKE @LastName+'%';
end
else
begin
select 
p.LastName,p.FirstName,e.JobTitle,e.HireDate
 from Person.Person p LEFT JOIN HumanResources.Employee e on p.BusinessEntityID = e.BusinessEntityID;
end
exec  spEmployeeByName;--使用默认值
exec  spEmployeeByName 'Dobney';--使用参数

创建输出参数

定义:给调用存储过程的对象传递非记录集的信息。
案例1:

create proc dbo.uspLogErrors--创建带架构的存储过程
@ErrorLogID int = 0 output--声明输出参数
as
begin
set nocount on;--作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数;
set @ErrorLogID = 0;--设置值
--处理错误信息--
begin try
if ERROR_NUMBER() is null--判断错误行号
return;
if XACT_STATE()=-1-- XACT_STATE 指示请求是否有活动的用户事务,以及是否能够提交该事务
begin
print 'Cannot log error since the current transaction is in an uncommittable state.'
+'Rollback the transaction before executing uspLogError in order to successfully log error information.';
return;
end
--插入信息--
insert into dbo.ErrorLog
(
[UserName],
[ErrorNumber],
[ErrorSeverity],
[ErrorState],
[ErrorProcedure],
[ErrorLine],
[ErrorMessage]
) 
values(
CONVERT(sysname,CURRENT_USER),
ERROR_NUMBER(),
ERROR_SEVERITY(),
ERROR_STATE(),
ERROR_PROCEDURE(),
ERROR_LINE(),
ERROR_MESSAGE()
)
set @ErrorLogID = @@IDENTITY;--获取插入标识
end try
begin catch
print 'An error occurred in stored procedure uspLogError:';
execute dbo.uspLogErrors;
return -1;
end catch
end
--执行语句--
exec dbo.uspLogErrors 10;

案例2:
begin try
create table OurIFTest(
Col1 int primary key
);
end try
begin catch
declare @MyOutputParameter int;
if error_number() = 2714
begin
print 'WARNING:Skipping CREATE as table already exists';
exec dbo.uspLogError @ErrorLogID = @MyOutputParameter output;
print 'An error was logged.The Log ID for your error was'+ cast(@MyOutputParameter as varchar);
end
else
raiserror('something not good happened this time around',16,1);
end catch

注意:
●  对于存储过程声明中的输出参数,需要使用OUTPUT关键字。
●  和声明存储过程一样,调用存储过程时必须使用OUTPUT关键字。
●   赋给输出结果的变量不需要和存储过程中的内部参数有用相同的名称。
●   EXEC(或者EXECUTE) 关键字是必须的,因为对存储过程的调用并不是批处理要做的第一件事。

通过返回值确认成功或失败

定义:返回值就是实际地返回数据,例如标识值或者是存储过程影响行数。而其实际作用是返回值可用来确定存储过程的执行状态。返回值指示了存储过程的成功或者失败,甚至是成功或失败的程度或属性。

如何使用RETURN

定义:事实上,不管是否提供返回值,程序都会收到一个返回值。SQLServer默认会在完成存储过程时自动返回一个0值。
语法:RETURN [<integer value to return >]
注意:返回的必须是整数。是无条件地从存储过程中退出的。这是指五路运行到存储过程的那个位置,在调用RETURN 语句之后将不会执行任何一行代码。这里说的无条件并不是说无论执行到代码的何处都将执行RETURN语句。相反,可以存储过程中有多个RETURN语句,只有当代码的标准条件结构发出命令时,才会执行这些RETURN语句,一旦这种情况发生,就不能再返回。
案例:
create proc spTestReturns
as
declare @MyMessage varchar(50);
declare @MyOtherMessage varchar(50);
select @MyMessage = 'Hi,it ''s that line before the RETURN';
print @MyMessage;
return 100;
select @MyOtherMessage = 'Sorry,but you won''t get this far';
print @MyOtherMessage;
return;
--测试代码----
declare @Return int;
exec @Return = spTestReturns;
select @Return;
--删除spTestReturns
drop proc spTestReturns;
注意:返回值一定是整数

错误处理

SQLServer中常见的错误类型:
● 产生运行时错误并终止代码继续执行的错误。
● SQL Server 知道、但不产生使代码停止运行的运行时错误的错误。这类错误也称为内联错误。
● 更具有逻辑性但是SQL Server 中不太引起注意的错误。

处理内联错误

定义:内联错误是指:那些能让SQL Server 继续运行,但是因为某些原因而不能成功完成指定任务的错误。
案例:insert into Person.BusinessEntityContact(BusinessEntityID,PersonID,ContactTypeID) values(0,0,1);出现547错误,即是插入错误。

利用@@ERROR

定义:@@ERROR 包含了最后执行的T-SQL语句的错误号。如果该值为0,则没有发生任何错误。与ERROR_NUMBER()函数有些类似,ERROR_NUMBER()函数只在CATCH块中有效(并且不管在CATCH块中的哪个位置都有效),而@@ERROR根据执行的每一条语句接收一个新值。
注意:有关@@ERROR的警告是每条新语句都会使之重置。想要保存它的某个位置的状态值必须保存到一个局部变量中。

案例:
declare @Error int;
insert into Person.BusinessEntityContact(BusinessEntityID,PersonID,ContactTypeID)values(0,0,1);
select @Error = @@ERROR;--获取上一条语句的错误状态,并赋值给一个局部变量,因为每一条语句都会是之重置。
print '';
print 'The Value of @Error is '+convert(varchar,@Error);
print 'The Value of @@ERROR is'+convert(varchar,@@ERROR);

在存储过程中使用@@ERROR

定义:如果需要向后兼容或更早的版本,那么TRY/CATCH就不适用。
注意:TRY/CATCH将处理之前的版本中终止脚本执行的各种错误。
案例:

--创建存储过程spInsertValidateBusinessEntityContact
create proc spInsertValidateBusinessEntityContact
@BusinessEntityID int,
@PersonID int,
@ContactTypeID int
as
begin
declare @Error int;
insert into Person.BusinessEntityContact(BusinessEntityID,PersonID,ContactTypeID)
values(@BusinessEntityID,@PersonID,@ContactTypeID)
set @Error = @@ERROR;--将@@ERROR赋给局部变量进行保存
if @Error = 0
print N'新记录被插入';
else
begin
if @Error = 547
print 'At least one provided parameter was not found.Correct and retry';
else
print 'UnKnown error occurred.Please contact your system admin';
end
end
--执行存储过程
exec spInsertValidateBusinessEntityContact 1,1,11;

在错误发生之前处理错误

定义:在错误发生之前处理错误。
案例:
create proc HumanResources.uspUpdateEmployeeHireInfo2
@BusinessEntityID int,
@JobTitle nvarchar(50),
@HireDate datetime,
@RateChangeDate datetime,
@Rate money,
@PayFrequency tinyint,
@CurrentFlag dbo.Flag
with exec as caller--指定在模块调用方的上下文中执行该模块中的语句。
as
begin
set nocount on;--作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息。当SET ONCOUNT ON时候,不返回计数,当SET NOCOUNT OFF时候,返回计数;
declare @BUSINESS_ENTITY_ID_NOT_FOUND int = -1000,--声明常量
@DUPLICATE_RATE_CHANGE int = -2000;--声明常量
begin try
begin transaction;--表示开启一个事务
update HumanResources.Employee
set 
JobTitle = @JobTitle,
HireDate = @HireDate,
CurrentFlag = @CurrentFlag
where BusinessEntityID = @BusinessEntityID;
insert into HumanResources.EmployeePayHistory
(
BusinessEntityID,
RateChangeDate,
Rate,
PayFrequency
)
values(
@BusinessEntityID,
@RateChangeDate,
@Rate,
@PayFrequency
);
commit transaction;--提交一个事务
end try
begin catch
if @@TRANCOUNT>0--返回在当前连接上执行的 BEGIN TRANSACTION 语句的数目
begin
--rollback transaction;--将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点
insert into HumanResources.EmployeePayHistory
(BusinessEntityID,RateChangeDate,Rate,PayFrequency)
values
(@BusinessEntityID,@RateChangeDate,@Rate,@PayFrequency);
end
else
begin
print 'BusinessEntityID not Found';
rollback transaction;
return @BUSINESS_ENTITY_ID_NOT_FOUND;
end
end catch
end

手动引发错误

定义:有时候会出现SQL Server 不能识别的错误,但是你希望SQL Server 能识别这样的错误。用RAISERROR命令。
语法:RAISERROR(<message ID|message string|variable>,<sererity>,<state>[,<argument>[,<...n>]])[WITH option[,...n]]

消息ID/消息字符串

定义:消息ID或消息字符串决定了向客户端发送的消息。
语法:
select * from master.sys.messages;--查询所有可能的系统消息
raiserror(N'引发了消息',1,1);

严重性

定义:信息性的错误(1-18),系统级错误(19-25),灾难级的错误(20-25)。如果引发的严重错误是19或者更高(系统级的),那么必须指定WITH LOG 选项。20以及更高级别的错误严重性会自动终止用户的连接。



状态

定义:状态是一个特殊的值。它会在识别的代码中的多个地方发生的相同错误。这样就可以发送位置标记表名发生错误的地方。状态值是1-127之间。

错误参数

定义:一些预定义的错误会接受参数。这就可能通过改变错误特性来史错误更具有动态性。也可以格式化错误消息来接受参数。
动态信息格式符号




最后一点很总要,可以设定参数的宽度,精度和数据类型的长/短。
宽度:通过提供整数值来设定想要为参数值所保留的空间。也可以指定“*”,在这种情况下,SQL Server会自动根据设定的精度值来决定宽度。
精度:确定了数值类型数据输出的最大数据位数。
长/段:当参数为整型、八进制数或十六进制数时,使用h(short)或l(long)来设定。
案例:raiserror('This is a sample parameterized %s,along with a zero pading and a sign%+010d',1,1,'string',12121);

WITH<option>

目前,在引发错误时混合搭配一下3个选项:
●LOG:这告诉SQL Server在SQL Server 错误日志和Windows应用程序日志中的记录错误。对于严重性级别大于或等于19的错误,这个选项是必须的。
●SETERROR:默认情况下,RAISERROR命令不会将@@ERROR设置为所生成的错误值。@@ERROR反映了实际的RAISERROR命令是成功或失败的。SETERROR重写了这个值并把@@ERROR的值设置为特定的错误ID。
●NOWAIT:这将立即向客户端通知错误。

重新抛出错误

定义:开发人员使用的不限于T-SQL领域的经验法则是只捕获可以处理的错误,您不知道如何处理的任何错误都应该直接传递给调用者,调用者可能知道(也可能不知道)如何处理错误,但是至少不需要你来处理。如果您没有准备好处理一个错误,则可以向下抛出(THROW)该错误。THROW在某些方面非常类似与RAISERROR,但是有一些重要的区别。
语法:THROW[error_number,message,state][;]
和raiserror的区别:THROW的参数非常类似与RAISERROR的参数,但是没有严重级别的参数。这是因为在使用指定的参数值调用THROW时,始终使用严重级别16。注意,16表示默认情况下不懈人Windows日志。但是当前的代码将停止执行。
●使用THROW时,error_number参数不需要已经存在于sys,messages中。但是,应该确保在某个位置定义您的错误。
●RAISERROR消息字符串使用prinf样式的语法进行动态消息传递,而THROW不这样做,如果您想要自定义抛出的消息,则必须预先连接它。
●THROW之前的语句必须以分号(;)终止。
案例:
begin try
insert OurIFTest(Col1) values(1);
end try
begin catch
print 'Arrived in the CATCH block.';
declare @ErrorNo int,
@Severity tinyint,
@State smallint,
@LineNo int,
@Message nvarchar(4000);
select
@ErrorNo = ERROR_NUMBER(),
@Severity = ERROR_SEVERITY(),
@State = ERROR_STATE(),
@LineNo = ERROR_LINE(),
@Message = ERROR_MESSAGE();
if @ErrorNO = 2714
print 'WARNING:object already exists';
else
throw;
end catch

添加自定义的错误消息

定义:可以利用特殊的系统存储过程向系统添加自己的消息。这个存储过程称为sp_addmessage
语法:
sp_addmessage [@msgnum=]<msg id>,
[@severity=]<severity>,
[@msgtext=] <'msg'>
[,[@lang=]<'language'>]
[,[@with_log=][TRUE|FALSE]]
[,[@replace=]'replace']

除了其他的语言和替换参数,以及WITH LOG选项的一点区别外,该存储过程中所有参数的含义于raiserror中的是相似的。
1.@lang:指定了消息应用的语言。在该参数中可以为syslanguages中支持的任何余元指定消息的一个单独版本。
2.@with_log:其工作方式与raiserror中的一样,如果设为TRUE,当取出错误的时候,会向SQL Server错误日志和NT应用日志自动记录错误消息(只有运行在NT环境下才会实现后一个操作),这里唯一特别之处就是通过把该参数设置为true而不是使用with log 选项来把消息写入日志。
3.@replace:如果是编辑现有的消息而非创建一个新消息,那么必须把@replace参数设置为REPLACE。倘若不这样做,那么如果消息已经存在,就会得到一个错误。

使用sp_addmessage
案例:
sp_addmessage
@msgnum = 60000,
@lang ='us_english',
@severity=10,
@msgtext = '%s is not a valid Order date.Order date must be within 7 days of current date.'
删除已有的自定义消息
语法:sp_dropmessage<message number>
案例:sp_dropmessage 60000

存储过程的优点

1.创建可调用的进程
2.安全性

存储过程的性能



存储过程的缺点

1.对于存储过程不利之处要认识到的最重要的一点是,除非收到的干预(使用WITH RECOMPILE),否则只会在第一次运行存储过程时,或者当查询所涉及的表更新了统计信息时,擦会对存储过程进行优化。

2.使用WITH RECOMPILE选项
可以回避未使用正确的查询计划问题,因为可以确保为特定的某次运行创建新的计划。方法就是用WITH RECOMPILE选项。可以在运行时包含WITH RECOMPILE。只要在执行脚本中包含WITH RECOMPILE:
案例:EXEC spMySproc '1/1/2012' WITH RECOMPILE ;这告诉SQL Server 抛弃已有的执行计划并且创建一个新的计划——但是只有一次。也就是说,只有这次使用WITH RECOMPILE选项来执行存储过程,如果没有进一步的操作,SQLServer 一直继续新的计划。
也可以通过在存储过程中包含WITH RECOMPILE选项来时之变得更持久。如果使用这种方式,则在CREATE PROC 或 ALTER PROC 语句中的AS 语句前添加WITH RECOMPILE选项即可。如果通过该选项创建存储过程,那么无论在运行时选择了其他什么选项,每次存储过程时都会重新编译它。

存储过程实现递归

--递归--
create proc spFactorial
@ValueIn int,--输入参数
@ValueOut int OUTPUT--输出参数
as
declare @InWorking int;--输入值替换
declare @OutWorking int;--输出值替换


if @ValueIn>=1--判断输入值是否大于1
begin
select @InWorking = @ValueIn-1;
exec spFactorial @InWorking,@OutWorking OUTPUT;
select @ValueOut = @ValueIn* @OutWorking;
end
else
begin
select @ValueOut =1;
end
return;
 go

 --执行脚本
 declare @WorkingOut int;
 declare @WorkingInt int;
 select @WorkingInt = 5;
 exec spFactorial @WorkingInt,@WorkingOut OUTPUT;
 print cast(@WorkingInt as varchar) + 'factorial is'+cast(@WorkingOut as varchar);

理解.NET程序集

定义:.net程序集可以和系统关联起来,并用来帮助实现真正复杂的操作。例如:可以在一个用户自定义函数中使用.net程序集,以从外部数据源提供数据(可能需要动态调用的数据源,如新闻源或股票报价)。
语法:CREATE ASSEMBLY <assembly name> AUTHORIZATION <owner name> FROM <path to assembly> WITH PERMISSION_SET =[SAFE|EXTERNAL_ACCESS|UNSAFE]
这里的CREATE ASSEMBLY和所有CREATE语句的作用一样——它指定了创建的对象类型和对象名称。
AUTHORIZATION用于设置运行该程序集的上下文。如果它有需要访问的表,那么在AUTHORIZATION中如何设置用户或角色名称将决定是否可以访问这些表。
在这之后是FROM子句。FROM子句指定了改程序集的路径以及该程序集的清单。
最后是WITH PERMISSION_SET 它有以下3个选项:
●SAFE:这个选项指的是安全。它现在程序集访问SQL Server的外部内容。像文件或网络就不能被程序集访问。
●EXTERNAL_ACCESS:允许外部访问,如网络文件或网络,但是要求程序集仍旧以托管代码形式运行。
●UNSAFE:此项是不安全的。它不仅允许程序集访问外部系统对象,也运行非托管代码。

使用存储过程的时机

优点:
●通常更佳的性能。
●可以用作安全隔离层(控制数据库的访问和更新方式)。
●可重用的代码。
●划分代码(可以封装业务逻辑)
●根据在运行时建立的动态而可以灵活执行。
缺点:
●不能跨平台移植。
●有些情况下可能因为错误的执行计划而被锁定。

VMware虚拟机的安装教程 VMware 虚拟机的备份与恢复是保障数据安全和业务连续性的重要措施。综上所述,VMware 虚拟机的备份与恢复策略有多种选择,企业和用户可以根据实际需求和资源情况选择适合自己的方案,以确保虚拟机数据的安全和业务的连续性。 阅读详情

相关推荐

STC8G1K08A的10位PWM避坑指南:为什么你的占空比调节总失效?(附寄存器操作时序图)

本文深入剖析了STC8G1K08A单片机10位PWM功能中占空比调节失效的核心原因,揭示了数据手册未明确指出的寄存器操作时序陷阱。通过对比错误与正确配置的波形,文章指出关键在于更新占空比高2位前需临时关闭PWM输出,并提供了经过验证的安全操作宏与函数库,帮助开发者彻底解决此问题,实现0%-100%的平滑控制。

yyy34的博客 751

SQL Sever数据库存储过程

一、背景介绍 1.遇到存储过程 回顾之前知识,使用在当下(毕业设计) 2.了解周边知识 二、思路&方案 1.了解存储过程定义、语法、种类 2.存储过程有什么优缺点 3。存储过程与触发器和函数的联系 三、过程 1.什么是存储过程? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个“execute 存储过程名 参数”命令来调用存储过程。 2.语法 –创建存储过程 cr

向诸位大佬虚心学习 1万+

【UE5】UE5 Dedicated Server专用服务器与网络同步

这篇文章是个人在学习UE4的网络同步方面的内容的一些记录,因为UE5出来了,顺带也一起熟悉熟悉UE5,所以也就直接使用UE5来实践了。说句实在话,UE4网络同步这块确实挺难的,我自己在网上搜索的博客的内容要么停留在很浅层面只搭建一个ds服务器,要么就直接深入源码去剖析UE4的网络机制,处在中间层面的内容少之又少,不得不自己好一阵研究,强烈推荐这几位博主的博文,我在学习的过程中也从中受益匪浅。 Ken_An、风蚀之月、 刘东无敌还有我师傅推荐给我的一本关于UE4网络的PDF。 一、什么是Dedicated

Goulandis 3万+

SqlServer存储过程详解

看到别人总结的SQL server的存储过程觉得写的很好 ,就拿过来了,希望对大家有帮助。 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) drop proc pro_name go create proc pro_name @param_name param_t...

韩利巍 5万+

让 AI 变聪明的 20 条指令:如何让大模型回答得更精准、更专业、更实事求是

让 AI 变聪明,本质上不是写几句神奇咒语,而是把你的任务表达得更清楚,把事实标准设得更严格,把输出格式规定得更明确,把不确定性管理得更认真,把历史对话利用得更充分。大模型的强项是语言生成、信息组织、模式归纳和方案扩展;弱项是事实核验、实时更新、责任判断和对模糊意图的准确猜测。好的指令,就是在用人的判断弥补模型的弱点,让模型把强项发挥在正确的地方。

Sumarua的博客 1523

2023-10-20 - MacBook - 优化外接2k显示器体验:告别字小与字虚的终极指南

本文针对MacBook外接2K显示器时普遍遇到的字体过小和边缘发虚问题,提供了终极解决方案。通过深入解析macOS的HiDPI与Retina显示原理,并详细指导使用SwitchResX等工具开启隐藏的HiDPI模式,实现完美的2倍整数缩放,从而在保证字体大小合适的同时获得清晰锐利的显示效果,彻底告别字小与字虚的困扰。

solidity8miner的博客 477

SQL Server数据库存储过程

存储过程的定义:存储过程是一组预编译的SQL语句,可以被封装在数据库中,并通过名称和参数来调用。它们可以简化复杂的数据库操作,提高性能和安全性。存储过程的结构:存储过程通常由BEGIN和END块包裹,可以包含输入参数、输出参数、局部变量、SQL语句、控制流语句等。参数的使用:存储过程可以接受输入参数和输出参数。输入参数用于传递值给存储过程,输出参数用于返回值给调用者。错误处理:使用TRY...CATCH块来处理存储过程中可能发生的错误,确保数据库操作的完整性和一致性。事务管理。

m0_74824913的博客 4448

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7088

SQL Server基础之存储过程

SQL Server中的存储过程是使用T_SQL编写的代码段。它的目的在于能够方便的从系统表中查询信息,或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口。在很多情况下,一些代码会被开发者重复编写多次,如果每次都编写相同功能的代码,不但繁琐,而且容易出错,而且由于SQL Server逐条的执行语句会降低系统的运行效率。

李赛赛的专栏 6036

从 Classic ABAP 到 ABAP Cloud:一份面向开发者的 SAP 学习路线图与实战指南

ABAP技术演进路线:从语法到架构思维 本文系统梳理了现代ABAP开发者的能力成长路径。在S/4HANA与云时代,ABAP已从传统过程式语言转变为支持面向对象、测试驱动和云原生开发的现代技术栈。学习路线应围绕四大核心维度展开:1) 语言基础(ABAP OO/Modern ABAP);2) 工程化实践(ABAP Unit/ATC/Clean ABAP);3) 数据建模(CDS/AMDP);4) 服务化架构(Gateway/OData/Fiori)。文章强调以交付形态倒推技术栈,通过真实案例展示了如何将零散技术

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 363

【OpenClaw从入门到精通】第63篇:A股智能分析实战——用OpenClaw搭建个人量化研究助手(2026实测版)

2026年,OpenClaw已成为量化投研圈的现象级工具,八家头部券商密集发布专题研报力证其价值。传统量化投研面临技术门槛高、重复劳动多、策略迭代慢、非结构化数据处理弱四大痛点,而OpenClaw通过“AI智能体+金融Skill+量化API”的融合,实现了从数据获取、策略生成、回测验证到持仓监控的全流程自动化。本文基于2026年最新实测经验,完整呈现个人量化研究助手搭建:从阿里云部署、阿里云百炼API配置(含解析失败解决方案)、Tushare数据源接入,到PB-ROE价值选股、研报复现、自动化回测、持仓监控

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1063

php sqlserver存储过程,PHP调用MSSQL存储过程

在PHP中调用MS SQL存储过程functiongenerateDocCode(){$wf_id=self::WORKFLOW_ID;$doc_code="";$link=mssql_connect($this->cfg->db->params->host,$this->cfg->db->params->username,$this->cfg...

weixin_35052140的博客 374

【WLAN】【测试】WPS测试方法小结

手机 一般稍微老的手机会支持,新手机反而不支持。 比如小米6(系统版本新的话不支持)在设置——高级设置——WPS连接。 笔记本 有些笔记本(如Surface Laptop 3)天生支持WPS,比如在连接某SSID的时候,会有“也可以通过按路由器上的按钮连接”这样的字样,出来后按AP的WPS按键即可以进行连接。 Qss软件 AP mesh组网中,Controller和Agent之间通过WIFI组网,可使用WPS的方式进行连接。可利用这点用Agent来测试AP的WPS功能。 ...

一介草民,只为生活。 1万+

php sqlserver存储过程,PHP操作MSSQL存储过程大致流程 - YangJunwei

PHP操作MSSQL存储过程在最近的项目中用到不少,这里总结一下。1、连接MSSQL数据库 mssql_connectif( !defined('MSDB_HOST') ){ define('MSDB_HOST', '1.2.3.4'); }if( !defined('MSDB_PORT') ){ define('MSDB_PORT', 1433); }if( !defined('MSDB_USE...

weixin_34537864的博客 513

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mssql sqlserver存储过程专题

MSSQL存储过程简介及创建方式 mssql_DB_存储过程类型简介 MSSQL sql存储过程创建简介及应用举例 MSSQL SQl server 2008 CLR 存储过程创建举例 MSSQL 存储过程两种加密方式简介 MSSQL 嵌套存储过程简介 MSSQL sql存储过程和CLR存储过程区别 MS...

weixin_30482383的博客 129

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MSSQL存储过程命令执行

同样也是利用sp_oacreate,但使用的是scripting.filesystemobject对象,该对象用来操作一些文件。组件是对数据和方法的简单封装,可以理解为对象。属性是组件数据的简单访问者,而方法就是组件的一些简单功能。MSSQL指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案。#depth设置为1,表示显示所以子目录,file设置为1,表示显示子目录的文件。需要注意的是该存储过程执行命令无回显,所以将命令执行的结果输出到文件里。

Hacker_LaoYi的博客 1076

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

mssql sqlserver 自动备份存储过程的方法分享

mssql sqlserver 自动备份存储过程的方法分享 原文:mssql sqlserver 自动备份存储过程的方法分享转自:http://www.maomao365.com/?p=7847摘要: 为了更好的记录数据库中存储过程脚本的变化情况,下文采用数据库触发器来自动记载每次“存储过程”的变化(新增或修改),如下所示: 实验环境...

weixin_30522183的博客 169

MSSQL 存储过程:功能和用法详解

MSSQL 存储过程是一种在 Microsoft SQL Server 数据库中存储和执行代码的强大工具。本文将详细介绍 MSSQL 存储过程的功能和用法,包括定义和创建存储过程、参数的使用、事务控制、错误处理以及优点和示例等方面,帮助读者更好地了解和运用 MSSQL 存储过程。

naer_chongya的博客 1666

mssql sqlserver 批量删除所有存储过程的方法分享

原文:mssql sqlserver 批量删除所有存储过程的方法分享转自:http://www.maomao365.com/?p=6864 摘要: 下文讲述采用sql脚本批量删除所有存储过程的方法,如下所示: 实验环境:sqlserver 2008 R2 平常使用sql脚本,删除存储过程,我们只可以使用删除命令一条一条的删除存储过程,下文介绍一种简便方法,可以对系统中所有的存储...

weixin_34174105的博客 143

sqlserver存储过程

一、存储过程 1.预先存储好的sql程序,保存在sqlserver中,通过名称和参数执行。 2.存储过程中可以包含:insert语句,update语句,delete语句,select语句,逻辑控制语句以及变量。 二、存储过程的优点: 1.执行速度更快 2.允许模块化程序设计 3.提高系统安全性 4.减少网络流量 三、存储过程的分类: 1.系统存储过程 (1)一般以sp_开头,由sqlserver创...

穆雄雄的博客 1万+

MSSQL创建存储过程

--创建无参存储过程 --检测是否存在要创建的存储过程,如果存在将其删除 IF EXISTS(SELECT * FROM sysobjects WHERE name='StaffInfoSel') DROP PROC StaffInfoSel --删除之后要加入批处理的GO GO CREATE PROCEDURE StaffInfoSel AS SELECT StaffNum,Staff...

SCscHero的博客 2321

c++ builder 存储过程 mysql mssql_C++ Builder实现Microsoft SQL Server 2000 的扩展存储过程...

C++ Builder实现Microsoft SQL Server 2000 的扩展存储过程爱搞机 2008-11-13 15:37这个存储过程是计算 MD5 值的,可以用来进行密码认证加密等。SQL Server 的扩展存储过程 (Extended Stored Procedure, 简称 XP) 是通过在 MSSQL 数据库注册封装在 .dll 里面的函数实现的,而这个 .dll 应该按照 M...

weixin_34651330的博客 223

python执行sqlserver存储过程_python – 从SqlAlchemy调用MSSQL存储过程

看起来SqlAlchemy似乎不支持调用存储过程.有没有人找到适用于SQL Server的解决方法?样品程序:CREATE PROCEDURE list_lock_set @name varchar (5), @requester varchar(30)ASBEGINSET NOCOUNT ON;INSERT INTO list_lock (name, requester, acquired) v...

weixin_35879989的博客 886

MSSQL存储过程的功能和用法

存储过程是数据库中的一种预编译的SQL语句,它被创建时被存储在数据库中,并且可以在需要时被调用。存储过程可以接受参数、执行特定的SQL语句,并返回结果。在Microsoft SQL Server(MSSQL)中,存储过程是一段预编译的SQL代码,可以在数据库服务器上执行,以提高数据处理的效率。存储过程是MSSQL中非常重要的功能之一,它可以提高数据处理的效率、简化编程和增强数据安全性。在使用存储过程时,需要注意它们的优点和缺点,并正确地使用它们来满足实际需求。

这家伙很懒,什么都没有留下 1163

php sqlsrver存储过程,php连接mssql的存储过程,没有结果,但是,这个存储过程在sql server上运行是有数据的。...

我拷贝了别人的例子,利用php连接mssql的存储过程,但是,没有结果,这个存储过程在sql server上运行是有数据的。header("Content-type:text/html;charset=utf-8");date_default_timezone_set('UTC');$serverName="172.18.200.83, 1433";$connectionInfo = array(...

weixin_39883129的博客 222
上一篇: SQL Server基础之存储过程
下一篇: SQL Server 中WITH (NOLOCK)浅析
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值