GVKun编程网logo

sql server 2005中使用with实现递归的方法

4

如果您想了解sqlserver2005中使用with实现递归的方法的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于SQLServer2005中更改sa的用户名的方法、SQLserver20

如果您想了解sql server 2005中使用with实现递归的方法的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于SQL Server 2005中更改sa的用户名的方法、SQL server 2005中设置自动编号字段的方法、SQL Server 公用表表达式(CTE)实现递归的方法、sql-server – sql server 2005中的递归函数?的有价值的信息。

本文目录一览:

sql server 2005中使用with实现递归的方法

sql server 2005中使用with实现递归的方法

代码如下:
WITH fw_requestion_note_temp(old_apply_id) AS ( --取根节点放入临时表
SELECT old_apply_id FROM fw_requestion_note --WHERE old_apply_id = 'e741470e-8b5c-4f91-9b03-c7474d103aef'
--根据已取到的数据递归取其字节点的数据

UNION ALL SELECT fw.old_apply_id FROM fw_requestion_note fw
INNER JOIN fw_requestion_note_temp temp ON fw.apply_id = temp.old_apply_id ) SELECT old_apply_id FROM fw_requestion_note_temp

SQL Server 2005中更改sa的用户名的方法

SQL Server 2005中更改sa的用户名的方法

修改数据库SA账号名称的代码如下:

复制代码 代码如下:

Alter LOGIN sa DISABLE
Alter LOGIN sa WITH NAME = [systemAccount]

"systemAccount" 为SA的新名称,执行完成后刷新一下右侧登录名即可看到修改成功的账号名称。

SQL Server 2005修改sa用户密码的方法图文版

一、修改SQL Server 2005中sa用户密码的方法

1. 点击“开始 - 所有程序 - Microsoft SQL Server 2005 - 配置工具 - SQL Server Configuration Manager”,打开“SQL Server Configuration Manager”窗口。如下图所示:

“SQL Server Configuration Manager”对话框

2. 打开“SQL Server 2005 网络配置”,点击“SQL2005 的协议(在这里,使用的是我们的安装的实例名称)”项,如下图所示:

点击“SQL2005 的协议”项

3. 在右边的“Named Pipes”上面单击鼠标右键,在弹出的子菜单中点击“启用”命令,弹出“警告”对话框。如下图所示:

“警告”对话框

4. 点击“确定”按钮。

5. 打开“SQL Native Client 配置”,点击“客户端协议”项。如下图所示:

点击“客户端协议”项

6. 在右边的“Named Pipes”上面单击鼠标右键,在弹出的子菜单中点击“启用”命令。关闭“SQL Server Configuration Manager”窗口。

7. 点击“开始 - 所有程序 - Microsoft SQL Server 2005 - SQL Server Management Studio”,在“连接到服务器”窗口中选择“Windows 身份验证”。如下图所示:

选择“Windows 身份验证”

8. 点击“连接”按钮,登录“Microsoft SQL Server Management Studio”。

9. 在“对象资源管理器”窗口的“实例名\(SQL Server 9.0.5000)”上面单击鼠标右键,在弹出的子菜单中选择“属性”命令。如下图所示:

选择“属性”命令

10. 打开“服务器属性”窗口。如下图所示:

“服务器属性”窗口

11. 在“选择页”中选择“安全性”项,在“服务器身份验证”中选择“SQL Server 和 Windows 身份验证模式”项,然后点击“确定”按钮。

12. 在“对象资源管理器”窗口中,打开“安全性”项,打开“登录名”项,在“sa”上面单击鼠标右键,在弹出的子菜单中选择“属性”命令。如下图所示:

选择“属性”命令

13. 打开“登录属性”窗口。如下图所示:

“登录属性”窗口

14. 修改密码以后,去掉“强制实施密码策略”前面的勾(√),点击“确定”按钮。

至此,SQL Server 2005中sa用户的密码修改成功!

15. 启动“SQL Server Management Studio”,在“连接到服务器”对话框中,即可选择“SQL Server 身份验证”。如下图所示:

选择“SQL Server 身份验证”

16. 在“登录名”框中输入“sa”,再输入修改过的密码,然后点击“连接”按钮,即可成功启动“SQL Server Management Studio”!


二、使用SQL语句修改SQL Server 2005中sa用户的密码
首选,使用Windows身份验证的方式启动“SQL Server Management Studio”,
其次,在“服务器属性”窗口中选择“SQL Server 和 Windows 身份验证模式”项,
然后,取消“强制实施密码策略”项。

最后在“新建查询”中执行下面的代码之一:

代码一:

ALTER LOGIN sa ENABLE; GO ALTER LOGIN sa WITH PASSWORD = ''password''; GO

代码二:

ALTER LOGIN sa WITH PASSWORD = N''新密码'' -- 可以这样使用:WITH PASSWORD = N''123456'' OLD_PASSWORD = N''旧密码''

代码三:

alter login [sa] with password=N''NewPassword'' --可以不用提供旧密码 --alter login [sa] with password=N''123456''


三、相关阅读
SQL Server 2000修改sa密码的方法

您可能感兴趣的文章:

SQL server 2005中设置自动编号字段的方法

SQL server 2005中设置自动编号字段的方法

如果希望重新定义在表中添加新记录时该列中自动生成并存储于列中的序列号,则可以更改该列的标识属性。在每个表中只能设置一个列的标识属性。
具有标识属性的列包含系统生成的连续值,该值唯一地标识表中的每一行(例如,雇员标识号)。在包含标识列的表中插入值时,Microsoft sql Server 将基于上一次使用的标识值(标识种子属性)和在创建列时指定的增量值(标识增量属性)自动生成下一个标识符。

注意:

只能为不允许空值且数据类型为 decimal、int、numeric、smallint、bigint 或 tinyint 的列设置标识属性。此外,不能为主键列设置标识属性。

修改列的标识属性

1.在对象资源管理器中,右键单击要更改其数据类型的列所在的表,再单击“修改”。此时,将在表设计器中打开该表。
2.清除要更改的列的“允许空”复选框。
3.在“列属性”选项卡中,展开“标识规范”属性。
4.单击“是标识”子属性的网格单元格,然后从下拉列表中选择“是”。
5.在“标识种子”单元格中键入值。此值将赋给表中的第一行。默认情况下将赋值 1。
6.在“标识增量”单元格中键入值。此值是基于“标识种子”依次为每个后续行增加的增量。默认情况下将赋值 1。

例如,假设要为添加到 orders 表的每行自动生成 5 位 Order ID,从 10000 开始并且每次递增 10。为此,应在“标识种子”中键入 10000,在“标识增量”中键入 10。
如果更改表的任何标识属性,则将保留现有的标识值。新的设置值仅应用于添加到表中的新行。

注意:

如果频繁执行删除操作的表中存在标识列,则标识值之间会出现不连贯的情况。若要避免出现这种不连贯的情况,请不要使用标识属性。

当您在网格单元格外单击或使用 Tab 键移动到其他网格单元格后,“标识规范”属性的新值将赋给表设计器中的列。当您在表设计器中保存更改时,这些值将在数据库中生效。

1. 创建表时指定自动编号的字段

rush:sql;"> CREATE TABLE [dbo].[UserInfor]( [UserID] [int] IDENTITY(100,2) NOT NULL,[UserName] [nchar](10) NOT NULL,)

说明:创建一个用户信息表UserInfor,并指定UserID为自动编号字段。
其中:IDENTITY(100,2)表示字段的初始值为100,每次增量为2,如输入数据后第一次为100,第二次为102。

2.获取自动编号的字段值

这里可以使用@@IDENTITY取得自动增加字段主键的值

(3)重新设置自动编号字段种子的起始值

如果用户将带有自动增加字段的表内容清空,由该字段的起始值将从原有的值开始增加,可以通过DBCC命令重新设置起始值。
DBCC CHECKIDENT (UserInfor,RESEED,0)
将UserInfor表的自动增加字段种子起始值设置为0,插入一条数据后自动字段的值为0+增量,如增量为1,则值为1

----------------------------------------------
右键你的表-->设计表-->找到你的id字段(类int型)-->标识-->是-->标识种子(初始值)-->标识递增量-->OK
---------------------------------

rush:sql;"> create table mytest ( id int primary key identity(1,1),--主键,自动+1 name varchar(20) unique not null,--不允许重复,不允许为空 Age tinyint,notetime smalldatetime default getdate() )

insert into mytest values ('张三',20,getdate())
insert into mytest (name,age)values ('李四',20)

SQL Server 公用表表达式(CTE)实现递归的方法

SQL Server 公用表表达式(CTE)实现递归的方法

公用表表达式简介:

公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。

下面先创建一个表,并插入一些数据:

create table Role_CTE
(
 Id  int    not null,
 Name nvarchar(32) not null,
 ParentId int  not null 
)
insert into Role_CTE(Id,Name,ParentId)
select ''1'',''超级管理员'',''0'' union 
select ''2'',''管理员A'',''1'' union 
select ''3'',''管理员B'',''2'' union 
select ''4'',''会员AA'',''2'' union 
select ''5'',''会员AB'',''2'' union 
select ''6'',''会员BA'',''3'' union 
select ''7'',''会员BB'',''3'' union 
select ''8'',''用户AAA'',''4'' union 
select ''9'',''用户BBA'',''7'' 
-- 创建一个复合聚集索引
create clustered index Clu_Role_CTE_Index
on Role_CTE(Id,ParentId)
with
(
 pad_index=on,
 fillfactor=50,
 drop_existing=off,
 statistics_norecompute=on
)
select * from Role_CTE

查找指定节点的所有子孙节点:

使用普通 sql 语句实现:

declare @level int
declare @node int
declare @ResTab table
(
 node int not null,
 lv  int not null 
)
set @level=0  -- 表示初始的等级
set @node=3   --表示初始的节点ID,即从指定的哪个节点开始查找
insert into @ResTab    -- 为表变量插入初始的数据
select Id,@level 
from Role_CTE 
where Id=@node
while(@@ROWCOUNT>0)
begin
 set @level=@level+1
 insert into @ResTab
 select b.Id,@level 
 from @ResTab a 
 join Role_CTE b on a.node=b.ParentId and lv=@level-1 -- join 等于 inner join(内连接)和自连接
end
select a.node,b.Name,a.lv 
from @ResTab a 
left join Role_CTE b on a.node=b.Id

以上是根据指定节点ID(3),查找父节点ID(即字段 ParentId)等于指定的节点ID,如果有就插入,并继续循环。

PS:lv=@level-1 是重点,不然会进入死循环,作用就是限制只插入一次。

如果需要限制循环的次数,即递归的层数,那么只需要在 while 条件里面添加一个限制即可。如下:

declare @level int
declare @node int
declare @num int
declare @ResTab table
(
 node int not null,
 lv  int not null 
)
set @level=0  -- 表示初始的等级
set @node=3   --表示初始的节点ID,即从指定的哪个节点开始查找
set @num=1  -- 指定递归层级,即循环的次数
insert into @ResTab    -- 为表变量插入初始的数据
select Id,@level 
from Role_CTE 
where Id=@node
while(@@ROWCOUNT>0 and @level<@num)
begin
 set @level=@level+1
 insert into @ResTab
 select b.Id,@level 
 from @ResTab a 
 join Role_CTE b on a.node=b.ParentId and lv=@level-1 -- join 等于 inner join(内连接)和自连接
end
select a.node,b.Name,a.lv 
from @ResTab a 
left join Role_CTE b on a.node=b.Id

当然,如果指定了循环次数,就可以不用 while 判断语句的 @@rowcount>0 了。

使用 SQL CTE 实现:

declare @node int 
set @node=3;
with temp_cte
as
(
 select Id,Name,0 lv  -- 查询出“根节点”,即指定的起始节点
 from Role_CTE 
 where Id=@node 
 union all
 select b.Id,b.Name,a.lv+1 
 from temp_cte a 
 join Role_CTE b on a.Id=b.ParentId
)
select * from temp_cte

使用 CTE 控制递归的层数,与上面类似。如下:

declare @node int 
declare @num int
set @node=3;
set @num=1;
with temp_cte
as
(
 select Id,Name,0 lv  -- 查询出“根节点”,即指定的起始节点
 from Role_CTE 
 where Id=@node 
 union all
 select b.Id,b.Name,a.lv+1 
 from temp_cte a 
 join Role_CTE b on a.Id=b.ParentId
     and a.lv<@num  --控制递归层数
)
select * from temp_cte

查找指定节点的所有祖先节点:

使用普通 sql 语句实现:

declare @level int
declare @node int
declare @num int
declare @ResTab table
(
 node int not null,
 lv  int not null 
)
set @level=0 -- 表示初始的等级
set @node=8   --表示初始的节点ID,即从指定的哪个节点开始查找
set @num=2  -- 指定递归层级,即循环的次数
while(@level<=@num and @node is not null) -- 如果为空就表示没有查到父级了
begin
 insert into @ResTab
 select @node,@level
 set @level=@level+1
 select @node=ParentId 
 from Role_CTE 
 where Id=@node
end
select a.node,b.Name,a.lv 
from @ResTab a 
left join Role_CTE b on a.node=b.Id

使用 SQL CTE 实现:

declare @node int 
declare @num int
set @node=8;
set @num=2;
with temp_cte
as
(
 select Id,Name,ParentId,0 lv  -- 查询出“根节点”,即指定的起始节点
 from Role_CTE 
 where Id=@node 
 union all
 select b.Id,b.Name,b.ParentId,a.lv+1 
 from temp_cte a 
 join Role_CTE b on a.ParentId=b.Id
     and a.lv < @num  --控制递归层数
)
select * from temp_cte

以上所述是小编给大家介绍的SQL Server 公用表表达式(CTE)实现递归的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对网站的支持!

您可能感兴趣的文章:

sql-server – sql server 2005中的递归函数?

sql-server – sql server 2005中的递归函数?

任何人都可以建议用于说明递归函数的编程示例吗?
例如斐波那契系列或因子…

解决方法

以下是我使用google.com发现的一些文章;)

Recursion in T–SQL
Using recursion in stored procedures
A Recursive User-Defined Function (SQL Server 2000)

今天关于sql server 2005中使用with实现递归的方法的分享就到这里,希望大家有所收获,若想了解更多关于SQL Server 2005中更改sa的用户名的方法、SQL server 2005中设置自动编号字段的方法、SQL Server 公用表表达式(CTE)实现递归的方法、sql-server – sql server 2005中的递归函数?等相关知识,可以在本站进行查询。

本文标签:

上一篇SQL Server 2005 中做全文检索的方法分享(sql server 全文搜索)

下一篇SQL Server 2005的cmd_shell组件的开启方法(sql server cmd命令)