当前位置:首页 » 服务存储 » sqlserver存储过程太难
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver存储过程太难

发布时间: 2023-07-03 06:53:04

sqlserver存储过程怎么调试

SQL Server存储过程相信大家都接触过,下面就教您如何实现SQL Server存储过程的单步调试,希望可以让您对SQL Server存储过程有更深的认识。
1)调试
在SQL Server的SQL Query Analyzer(查询分析器)中,打开Object Brower(F8),在左边的列表中选择一数据库,展开Stored Proceres,然后选择要调试的存储过程(或任意一个存储过程),按右键,点击“Debug”,则弹出Debug Procere对话框,显示该存储过程的参数(可在Proceres列表中选择其他要调试的存储过程),为参数输入初始值,点击“Execute”按钮,进入Debug窗口;可使用上面一排按钮或其对应的快捷键对该存储过程进行“执行”“设断点”“取消断点”“单步跟踪”等操作;窗口下方是参数列表,第一个是自定义参数变量列表,在Debug的过程中显示全局变量和局部变量的值的变化,可对参数列表中该存储过程的参数初值进行修改,再重新调试;第二个列表是系统变量,可自行增加,如添加“@@Error”“@@RowCount”,观看其值的变化,其值不能手工修改。第三个列表是CallStack,暂时不知道怎么用。在参数列表中,不能直接把User_Name()、GetDate()等函数直接放到参数列表中跟踪,要把它们赋值予自定义变量进行查看。
大家可连接Pivot的SQL Server进行尝试,使用本机DB系统如果不行,则需要用Administrator登录本机,然后在企业管理器中,在本机的SQL Server Registration上点击右键,点“属性”,选择“Security”,选择“This account”,输入Administrator和密码,确定之。
2)SQL Server存储过程单步调试
具体步骤如下:
1、将服务器【身份验证】属性设置成【混合模式】(window与sql身份验证)
2、在【控制面板】中打开【服务】将【MSSQLSERVER】服务打开【属性】,选择【登录】页面,将登录身份设置成服务器本地帐号和该帐号密码,如administrator,密码123;
3、重新启动sqlserver服务,此时的服务指的是【SQL服务管理器】中的SQL SERVER服务;
假设【帐号】设置为administrator
此时达到的效果是:服务器本地帐号administrator与客户端上的administrator(并且该帐号的密码要与服务器密码相同)可以通过【查询分析器】进行调试;
如果想让【其他帐号】也能够调试,那么还需要如下设置:
1、在【服务器】上运行dcomcnfg.exe;
2、在【默认安全机制】中【默认访问权限】右边点击【编辑默认值】选择允许调试的帐号类型,如users用户类型,sample帐号有包含users组;
3、重新启动sqlserver服务;
3、在客户端上创建与服务帐号密码一样的用户,如sample;
做到这步就可以通过查询分析器的调试功能进行单步调试了

❷ 关于sqlserver存储过程的问题

创建带游标Cursor的存储过程
CREATE PROCEDURE PT @t_cursor CURSOR VARYING OUTPUT AS
SET @t_cursor=CURSOR FOR
Select tid,tname FROM Teacher OPEN @t_cursor
接下来,执行一个批处理,声明局部游标变量,执行上述过程以将游标赋值给局部变量,然后从该游标提取行。
Declare @gh char(4),@xm varchar(50), @MyCursor CURSOR
EXEC PT @MyCursor OUTPUT
WHILE (@@FETCH_STATUS =0)
BEGIN
FETCH NEXT FROM @MyCursor INTO @gh,@xm
PRINT @gh+' '+@xm
END
DEALLOCATE @MyCursor

❸ sqlserver

摘自:http://database.ctocio.com.cn/analysis/465/7709465.shtml
【IT专家网独家】SQL Server用户自定义函数和存储过程有类似的功能,都可以创建捆绑SQL语句,存储在server中供以后使用。这样能够极大地提高工作效率,通过以下的各种做法可以减少编程所需的时间:

重复使用编程代码,减少编程开发时间。
隐藏SQL细节,把SQL繁琐的工作留给数据库开发人员,而程序开发员则集中处理高级编程语言。
维修集中化,可以在一个地方做业务上的逻辑修改,然后让这些修改自动应用到所有相关程序中。
乍看之下,用户自定义函数和存储过程的功能似乎一摸一样。但是,其实这两者之间还有一些虽然细微但是很重要的差异:

存储过程是使用EXEC命令独立调用的,而用户自定义函数是在另一个SQL语句中调用的。
l存储程序是允许用户和程序去使用存储过程,而不是允许其存取表格,这样能够增强程序安全性。与标准的SQL Server相比,存储程序限制用户行动权限方面更为细化。例如,如果你有一个货存表格,每次卖出一个货物收银员都要对表格进行更新一次(从货存中把该货品减去一件)。你可以给收银员设置权限,允许其使用decrement_item存储过程,而不是允许他们有任意修改或村表格的权限。
函数必须始终返回一个值(一个标量值或一个表格)。而存储过程可以返回一个标量值、一个表值或无需返回值。
总而言之,存储程序对SQL Server开发员来说是最有价值的宝物之一,用于数据库中,能够大大的提高工作效率,增强安全性,绝对超值。

❹ SQLserver 数据库触发器 存储过程问题

添加的:
CREATE
TRIGGER
trig_xx_add
ON
[Table1]
AFTER
UPDATE,INSERT
AS
BEGIN
INSERT
INTO
[Table2]
([Proct])
SELECT
[Proct]
FROM
inserted
WHERE
NOT
EXISTS(SELECT
1
FROM
[Table2]
WHERE
[Proct]=inserted.[Proct])
END
假设你的id都是identity,
如果不是的话根据自己的需要进行修改
删除的也类似,
但是不知道你的需求是什么

❺ sqlserver的存储过程 求高手优化,

首先,goto+if 的组合其实实现的就是while的用法,可以去掉goto语句把Beg:if改成while即可
然后你写了两组关于max与min的查询赋值,我看了下,结构完全一致,完全可以合并为一组

❻ sqlserver怎么创建存储过程

1、可视化创建

a.登录SQL Server

b.打开数据库==》要创建存储过程的数据库==》可编程性==》存储过程

c.选中“存储过程”右击 ,在系出现的对话框中选择“新建存储过程”

d.在右侧出现的对话框中填写具体存储过程内容完成后执行即可

2、代码创建

a.全手写代码

一、定义变量
--简单赋值
declare@aint
set@a=5
print@a

--使用select语句赋值
declare@user1nvarchar(50)
select@user1='张三'
print@user1
declare@user2nvarchar(50)
select@user2=NamefromST_UserwhereID=1
print@user2

--使用update语句赋值
declare@user3nvarchar(50)
updateST_Userset@user3=NamewhereID=1
print@user3


二、表、临时表、表变量

--创建临时表1
createtable#DU_User1
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL
);
--向临时表1插入一条记录
insertinto#DU_User1(ID,Oid,[Login],Rtx,Name,[Password],State)values(100,2,'LS','0000','临时','321','特殊');

--从ST_User查询数据,填充至新生成的临时表
select*into#DU_User2fromST_UserwhereID<8

--查询并联合两临时表
select*from#DU_User2whereID<3unionselect*from#DU_User1

--删除两临时表
droptable#DU_User1
droptable#DU_User2

--创建临时表
CREATETABLE#t
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL,
)

--将查询结果集(多条数据)插入临时表
insertinto#tselect*fromST_User
--不能这样插入
--select*into#tfromdbo.ST_User

--添加一列,为int型自增长子段
altertable#tadd[myid]intNOTNULLIDENTITY(1,1)
--添加一列,默认填充全球唯一标识
altertable#tadd[myid1](newid())

select*from#t
droptable#t
--给查询结果集增加自增长列

--无主键时:
selectIDENTITY(int,1,1)asID,Name,[Login],[Password]into#tfromST_User
select*from#t

--有主键时:
select(selectSUM(1)fromST_UserwhereID<=a.ID)asmyID,*fromST_UseraorderbymyID
--定义表变量
declare@ttable
(
idintnotnull,
msgnvarchar(50)null
)
insertinto@tvalues(1,'1')
insertinto@tvalues(2,'2')
select*from@t
三、循环

--while循环计算1到100的和
declare@aint
declare@sumint
set@a=1
set@sum=0
while@a<=100
begin
set@sum+=@a
set@a+=1
end
print@sum
四、条件语句

--if,else条件分支
if(1+1=2)
begin
print'对'
end
else
begin
print'错'
end

--whenthen条件分支
declare@todayint
declare@weeknvarchar(3)
set@today=3
set@week=case
when@today=1then'星期一'
when@today=2then'星期二'
when@today=3then'星期三'
when@today=4then'星期四'
when@today=5then'星期五'
when@today=6then'星期六'
when@today=7then'星期日'
else'值错误'
end
print@week


五、游标

declare@IDint
declare@Oidint
declare@Loginvarchar(50)

--定义一个游标
declareuser_curcursorforselectID,Oid,[Login]fromST_User
--打开游标
openuser_cur
while@@fetch_status=0
begin
--读取游标
fetchnextfromuser_curinto@ID,@Oid,@Login
print@ID
--print@Login
end
closeuser_cur
--摧毁游标
deallocateuser_cur
六、触发器

触发器中的临时表:

Inserted
存放进行insert和update操作后的数据
Deleted
存放进行delete和update操作前的数据

--创建触发器
CreatetriggerUser_OnUpdate
OnST_User
forUpdate
As
declare@msgnvarchar(50)
--@msg记录修改情况
select@msg=N'姓名从“'+Deleted.Name+N'”修改为“'+Inserted.Name+'”'fromInserted,Deleted
--插入日志表
insertinto[LOG](MSG)values(@msg)

--删除触发器
droptriggerUser_OnUpdate
七、存储过程

--创建带output参数的存储过程
CREATEPROCEDUREPR_Sum
@aint,
@bint,
@sumintoutput
AS
BEGIN
set@sum=@a+@b
END

--创建Return返回值存储过程
CREATEPROCEDUREPR_Sum2
@aint,
@bint
AS
BEGIN
Return@a+@b
END

--执行存储过程获取output型返回值
declare@mysumint
executePR_Sum1,2,@mysumoutput
print@mysum

--执行存储过程获取Return型返回值
declare@mysum2int
execute@mysum2=PR_Sum21,2
print@mysum2八、自定义函数

函数的分类:

1)标量值函数

2)表值函数

a:内联表值函数

b:多语句表值函数

3)系统函数--新建标量值函数
createfunctionFUNC_Sum1
(
@aint,
@bint
)
returnsint
as
begin
return@a+@b
end

--新建内联表值函数
createfunctionFUNC_UserTab_1
(
@myIdint
)
returnstable
as
return(select*fromST_UserwhereID<@myId)

--新建多语句表值函数
createfunctionFUNC_UserTab_2
(
@myIdint
)
returns@ttable
(
[ID][int]NOTNULL,
[Oid][int]NOTNULL,
[Login][nvarchar](50)NOTNULL,
[Rtx][nvarchar](4)NOTNULL,
[Name][nvarchar](5)NOTNULL,
[Password][nvarchar](max)NULL,
[State][nvarchar](8)NOTNULL
)
as
begin
insertinto@tselect*fromST_UserwhereID<@myId
return
end

--调用表值函数
select*fromdbo.FUNC_UserTab_1(15)
--调用标量值函数
declare@sint
set@s=dbo.FUNC_Sum1(100,50)
print@s

--删除标量值函数
dropfunctionFUNC_Sum1
谈谈自定义函数与存储过程的区别:

一、自定义函数:

1.可以返回表变量

2.限制颇多,包括

不能使用output参数;

不能用临时表;

函数内部的操作不能影响到外部环境;

不能通过select返回结果集;

不能update,delete,数据库表;

3.必须return一个标量值或表变量

自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

二、存储过程

1.不能返回表变量

2.限制少,可以执行对数据库表的操作,可以返回数据集

3.可以return一个标量值,也可以省略return

存储过程一般用在实现复杂的功能,数据操纵方面。

❼ sqlserver数据库如何通过命令打开存储过程

1、打开SQL Server Managment管理工具,新建一个表。