SQL 为主表的谋一条记录,在中间表中同时插入多条数据
有时我们会像下面的情况一样,为主表的谋一条记录,在中间表(T_Stud_Course 表)中同时插入多条数据
T_Student 表
Stud_ID
Name
1
Tom
2
Jack
T_Course 表
Course_ID
Course
1
Chinese
2
English
T_Stud_Course 表
ID
Stud_ID
Course_ID
1
1
1
2
1
2
3
2
2
现在我们可以下面的存储过程来实现:
--为主表的谋一条记录,在中间表中同时插入多条数据
ALTER proc [dbo].[wholeInsert]
(
@insert_val nvarchar(1000), --新增的第一个字段的值(多个用‘,’分隔),如A,B,
@PK_id nvarchar(50), --新增数据的第二个字段值,同时也是删除旧数据的条件(不支持多个)
@col_1 nvarchar(20), --第一个字段名
@col_2 nvarchar(20), --第二个字段名
@Tab nvarchar(20), --表名
)
as
begin
declare @sql varchar(1000)
declare @strVal nvarchar(100)
set @sql='delete from '+@Tab+' where '+@col_2+'='+@PK_id
exec(@sql)
while(len(@insert_val)>0)
begin
set @strVal=substring(@insert_val,1,charindex(',',@insert_val,1)-1)
set @insert_val=substring(@insert_val,charindex(',',@insert_val,1)+1,len(@insert_val)-charindex(',',@insert_val,1))
set @sql='insert into '+@Tab+' ('+@col_1+','+@col_2+') values ('+@strVal+','+@PK_id+')'
exec(@sql)
end
end
执行:
Exec wholeInsert '1,2,','1','Course_ID','Stud_ID','T_Stud_Course'
--表示同时为Stud_ID=1的学生增加两门课程(Course_ID为1和2)
相关文档:
从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
SELECT TOP n-m+1 *
from Table
WHERE (id NOT IN (SELECT TOP m-1 id from Table ))
--从TABLE表中取出第m到n条记录 (Exists版本)
SELECT TOP n-m+1 * from TABLE AS a WHERE Not Exists
(Select * from (Select Top m-1 * from TABLE orde ......
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.S# from (select s#,score from SC where C#='001') a,(select s#,score
fr ......
-----------------------------------------------------------------------------------------------------------------------
create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
insert into tb values('001' , null , '广东省')
insert into tb values('002' , '001' , '广州市')
insert i ......
作者:superhasty
2007-11-29
在论坛上常见有朋友抱怨,说SQL Server太吃内存了。这里笔者根据经验简单介绍一下内存相关的调优知识。首先说明一下SQL
Server内存占用由哪几部分组成。SQL Server占用的内存主要由三部分组成:数据缓存(Data
Buffer)、执行缓存(Procedure Cache)、以及SQL Server引擎程序。S ......
2010-05-05 13:35:52.06 Server Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
2010-05-05 13:35:52.06 Server (c) 2005 Microsoft Corporation.
201 ......