易截截图软件、单文件、免安装、纯绿色、仅160KB

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)
 


相关文档:

【转】关于"递归树形查询SQL"的好帖

-----------------------------------------------------------------------------------------------------------------------
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 ......

1.什么叫SQL注入?如何防止?请举例说明

1.什么叫SQL注入?如何防止?请举例说明
答:SQL注入是常见的利用程序漏洞进行攻击的方法。导致sql注入攻击并非系统造成的,主要是程序中忽略了安全因素,利用sql语言漏洞获得合法身份登陆系统 
例如:
"Select * from users where name='"+uName+"' and pwd='"+uPwd+"' " ......

SQL 删除重复数据,只保留1条

if not object_id('Tempdb..#T') is null
    drop table #T
Go
Create table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2))
Insert #T
select 1,N'A',N'A1' union all
select 2,N'A',N'A2' union all
select 3,N'A',N'A3' union all
select 4,N'B',N'B1' union all
select 5,N'B',N'B2'
G ......

SQL 合并行,返回带分隔字符的字符串

 
--合并行,并返回合并的值
Create proc [dbo].[proUniteRow]
@tab varchar(30),           --表名
@col varchar(30),           --合并的列名
@where varchar(2000),     &nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号