十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
CREATE TRIGER trig_MyTrigger ON table AFTER INSERT
成都创新互联服务项目包括祁门网站建设、祁门网站制作、祁门网页制作以及祁门网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,祁门网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到祁门省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
AS
BEGIN
DECLARE @cur CURSOR
DECLARE @courseid int
SET @cur = CURSOR FOR SELECT COURSEID FROM inserted
OPEN @cur
FETCH NEXT FROM @cur INTO @courseid
WHILE(@@FETCH_STATUS=0)
BEGIN
UPDATE table2
SET OPENTIME=xxxxx
WHERE COURSEID=@courseid
FETCH NEXT FROM @cur INTO @curseid
END
CLOSE @cur
DEALLOCATE @cur
END
循环里面的UPDATE语句就是你的修改语句
需要分支的话可以用IF...ELSE IF...ELSE分支语句
@courseid是插入的编号
你这种情况用不着分支语句,
如果=2修改时是完全修改的话,如下:
delete B from A,B
where A.column1 and (AB主键关联)
go
innsert into B
select * from A
where column3
go
查询结果重复利用的问题:
鉴于你要用到的SQL插入语句是insert into table1 select * from table2
所以任何一次执行都是要进行select 的,但是SQL 引擎对这种情况提供了缓存机制,也就是每一个查询语句都不是直接就执行的,而是先到缓存区调用想同的查询,提高效率。我想这种做法虽然达不到你所说的重复利用,但是已经很不错了。
另外,如果你不想影响让这个查询影响别人对A表的操作,那你可以将数据先存到一个临时表,变成每次只对A表查询一次,然后对临时表多次的操作。
至于你说的SQL 的分支语句,sql有几个特殊语法可以解决:while,if,goto label, if exists() 等等,详细的用法网上有不少详解。
最后想说的是,能不用游标最好不用,除非你很强,知道什么时候用游标比其他方式的效率都高。
是因为没有安装SQLEXPRESS实例,它只是SQL中的一个分支版本,免费且可自由转散布,但是,对数据库文件大小有限制,一般仅作小型开发使用。如果本机安装了其它SQL版本,也可以直接使用其它的SQL实例进行开发,对开发工作不会有影响。
SQL Server2008版本很多,根据我们的需求,选择的SQL Server2008版本也各不相同,而根据应用程序的需要,安装要求亦会有所不同。
不同版本的 SQL Server 能够满足单位和个人独特的性能、运行时以及价格要求。安装哪些 SQL Server 组件还取决于您的具体需要。下面的部分将帮助您了解如何在SQL Server2008的不同版本和可用组件中做出最佳选择。
SQL Server 2008 的服务器版本下表介绍SQL Server2008的各个服务器SQL Server2008版本版本:
术语 定义
Enterprise(x86、x64 和 IA64)1
SQL Server Enterprise 是一种综合的数据平台,可以为运行安全的业务关键应用程序提供企业级可扩展性、性能、高可用性和高级商业智能功能。有关详细信息,请参阅 SQL Server 2008 各个版本支持的功能。
Standard(x86 和 x64)
SQL Server Standard 是一个提供易用性和可管理性的完整数据平台。它的内置业务智能功能可用于运行部门应用程序。有关详细信息,请参阅 SQL Server 2008 各个版本支持的功能。
SQL Server Standard for Small Business 包含 SQL Server Standard 的所有技术组件和功能,可以在拥有 75 台或更少计算机的小型企业环境中运行。
1目前可以使用的 Enterprise 是可试用 180 天的 SQL Server 2008 Enterprise Evaluation。有关详细信息,请参阅 SQL Server 网站。
SQL Server 2008 专业版SQL Server 2008 专业版是针对特定的用户群体而设计的。下表介绍 SQL Server 2008 的各个专业版。
术语 定义
SQL Server 2008 Developer(x86、x64 和 IA64)
SQL Server 2008 Developer 支持开发人员构建基于 SQL Server 的任一种类型的应用程序。它包括 SQL Server 2008 Enterprise 的所有功能,但有许可限制,只能用作开发和测试系统,而不能用作生产服务器。SQL Server 2008 Developer 是构建和测试应用程序的人员的理想之选。可以升级 SQL Server 2008 Developer 以将其用于生产用途。
工作组(x86 和 x64)
SQL Server Workgroup 是运行分支位置数据库的理想选择,它提供一个可靠的数据管理和报告平台,其中包括安全的远程同步和管理功能。
Web(x86、x64)
对于为从小规模至大规模 Web 资产提供可扩展性和可管理性功能的 Web 宿主和网站来说,SQL Server 2008 Web 是一项总拥有成本较低的选择。
SQL Server Express(x86 和 x64)
SQL Server Express with Tools(x86 和 x64)
SQL Server Express with Advanced Services(x86 和 x64)
SQL Server Express 数据库平台基于 SQL Server 2008。它也可用于替换 Microsoft Desktop Engine (MSDE)。SQL Server Express 与 Visual Studio 集成,从而开发人员可以轻松开发功能丰富、存储安全且部署快速的数据驱动应用程序。
SQL Server Express 免费提供,且可以由 ISV 再次分发(视协议而定)。SQL Server Express 是学习和构建桌面及小型服务器应用程序的理想选择,也是独立软件供应商、非专业开发人员和热衷于构建客户端应用程序的人员的最佳选择。如果您需要使用更高级的数据库功能,则可以将 SQL Server Express 无缝升级到更复杂的 SQL Server 版本。
Compact 3.5 SP1 (x86)
Compact 3.1 (x86)
SQL Server Compact 3.5 免费提供,是生成用于基于各种 Windows 平台的移动设备、桌面和 Web 客户端的独立和偶尔连接的应用程序的嵌入式数据库理想选择。
有关 SQL Server 2008 各个专业版的详细信息,请参阅 SQL Server 网站。
1、可视化创建
a.登录SQL Server
b.打开数据库==》要创建存储过程的数据库==》可编程性==》存储过程
c.选中“存储过程”右击 ,在系出现的对话框中选择“新建存储过程”
d.在右侧出现的对话框中填写具体存储过程内容完成后执行即可
2、代码创建
a.全手写代码
一、定义变量
--简单赋值
declare @a int
set @a=5
print @a
--使用select语句赋值
declare @user1 nvarchar(50)
select @user1='张三'
print @user1
declare @user2 nvarchar(50)
select @user2 = Name from ST_User where ID=1
print @user2
--使用update语句赋值
declare @user3 nvarchar(50)
update ST_User set @user3 = Name where ID=1
print @user3
二、表、临时表、表变量
--创建临时表1
create table #DU_User1
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
[Login] [nvarchar](50) NOT NULL,
[Rtx] [nvarchar](4) NOT NULL,
[Name] [nvarchar](5) NOT NULL,
[Password] [nvarchar](max) NULL,
[State] [nvarchar](8) NOT NULL
);
--向临时表1插入一条记录
insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (100,2,'LS','0000','临时','321','特殊');
--从ST_User查询数据,填充至新生成的临时表
select * into #DU_User2 from ST_User where ID8
--查询并联合两临时表
select * from #DU_User2 where ID3 union select * from #DU_User1
--删除两临时表
drop table #DU_User1
drop table #DU_User2
--创建临时表
CREATE TABLE #t
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
[Login] [nvarchar](50) NOT NULL,
[Rtx] [nvarchar](4) NOT NULL,
[Name] [nvarchar](5) NOT NULL,
[Password] [nvarchar](max) NULL,
[State] [nvarchar](8) NOT NULL,
)
--将查询结果集(多条数据)插入临时表
insert into #t select * from ST_User
--不能这样插入
--select * into #t from dbo.ST_User
--添加一列,为int型自增长子段
alter table #t add [myid] int NOT NULL IDENTITY(1,1)
--添加一列,默认填充全球唯一标识
alter table #t add [myid1] uniqueidentifier NOT NULL default(newid())
select * from #t
drop table #t
--给查询结果集增加自增长列
--无主键时:
select IDENTITY(int,1,1)as ID, Name,[Login],[Password] into #t from ST_User
select * from #t
--有主键时:
select (select SUM(1) from ST_User where ID= a.ID) as myID,* from ST_User a order by myID
--定义表变量
declare @t table
(
id int not null,
msg nvarchar(50) null
)
insert into @t values(1,'1')
insert into @t values(2,'2')
select * from @t
三、循环
--while循环计算1到100的和
declare @a int
declare @sum int
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
--when then条件分支
declare @today int
declare @week nvarchar(3)
set @today=3
set @week=case
when @today=1 then '星期一'
when @today=2 then '星期二'
when @today=3 then '星期三'
when @today=4 then '星期四'
when @today=5 then '星期五'
when @today=6 then '星期六'
when @today=7 then '星期日'
else '值错误'
end
print @week
五、游标
declare @ID int
declare @Oid int
declare @Login varchar(50)
--定义一个游标
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打开游标
open user_cur
while @@fetch_status=0
begin
--读取游标
fetch next from user_cur into @ID,@Oid,@Login
print @ID
--print @Login
end
close user_cur
--摧毁游标
deallocate user_cur
六、触发器
触发器中的临时表:
Inserted
存放进行insert和update 操作后的数据
Deleted
存放进行delete 和update操作前的数据
--创建触发器
Create trigger User_OnUpdate
On ST_User
for Update
As
declare @msg nvarchar(50)
--@msg记录修改情况
select @msg = N'姓名从“' + Deleted.Name + N'”修改为“' + Inserted.Name + '”' from Inserted,Deleted
--插入日志表
insert into [LOG](MSG)values(@msg)
--删除触发器
drop trigger User_OnUpdate
七、存储过程
--创建带output参数的存储过程
CREATE PROCEDURE PR_Sum
@a int,
@b int,
@sum int output
AS
BEGIN
set @sum=@a+@b
END
--创建Return返回值存储过程
CREATE PROCEDURE PR_Sum2
@a int,
@b int
AS
BEGIN
Return @a+@b
END
--执行存储过程获取output型返回值
declare @mysum int
execute PR_Sum 1,2,@mysum output
print @mysum
--执行存储过程获取Return型返回值
declare @mysum2 int
execute @mysum2= PR_Sum2 1,2
print @mysum2
八、自定义函数
函数的分类:
1)标量值函数
2)表值函数
a:内联表值函数
b:多语句表值函数
3)系统函数
--新建标量值函数
create function FUNC_Sum1
(
@a int,
@b int
)
returns int
as
begin
return @a+@b
end
--新建内联表值函数
create function FUNC_UserTab_1
(
@myId int
)
returns table
as
return (select * from ST_User where ID@myId)
--新建多语句表值函数
create function FUNC_UserTab_2
(
@myId int
)
returns @t table
(
[ID] [int] NOT NULL,
[Oid] [int] NOT NULL,
[Login] [nvarchar](50) NOT NULL,
[Rtx] [nvarchar](4) NOT NULL,
[Name] [nvarchar](5) NOT NULL,
[Password] [nvarchar](max) NULL,
[State] [nvarchar](8) NOT NULL
)
as
begin
insert into @t select * from ST_User where ID@myId
return
end
--调用表值函数
select * from dbo.FUNC_UserTab_1(15)
--调用标量值函数
declare @s int
set @s=dbo.FUNC_Sum1(100,50)
print @s
--删除标量值函数
drop function FUNC_Sum1
谈谈自定义函数与存储过程的区别:
一、自定义函数:
1. 可以返回表变量
2. 限制颇多,包括
不能使用output参数;
不能用临时表;
函数内部的操作不能影响到外部环境;
不能通过select返回结果集;
不能update,delete,数据库表;
3. 必须return 一个标量值或表变量
自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
二、存储过程
1. 不能返回表变量
2. 限制少,可以执行对数据库表的操作,可以返回数据集
3. 可以return一个标量值,也可以省略return
存储过程一般用在实现复杂的功能,数据操纵方面。
卸载SQL Server 2008 R2
1。首先在控制面板里卸载sqlserver和相关的依赖项。
2。然后重启电脑,以防有些组件驻留内存无法删除。
3。使用Windows Install Clean Up 工具清理其他垃圾
4。删除C:\Program Files\Microsoft SQL Server下的工作目录。
5。删除C:\Program Files (x86)\Microsoft SQL Server下的工作目录。
6。打开注册表编辑器(开始→运行→regedit→确定)
然后找到下面的文件夹,删除掉:
6.1。HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server
6.2。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server和
Microsoft SQL Server开头的一并删除
7。清理其他包含Microsoft SQL Server的目录。如
8。如果不能正常安装SQL Server的话,请尽量重新安装系统。这是代价最小的方法。