insert into tbl_name select * from tbl_name where id in (1,2,3)update tbl_name
set cVouchType = case cVouchType when 1 then 123
when 2 then 456
when 3 then 789
end
set cVouchType = case cVouchType when 1 then 123
when 2 then 456
when 3 then 789
end
select id,case when id=1 then 123
when id=2 then 456
when id=3 then 789
end as cVouchType
from tbl_name
where id in (1,2,3)
insert into tbl_name(col1,col2,...,cVouchType)
select col1,col2,..., case id when 1 then 123 when 2 then 456 when 3 then 789 end
from tbl_name where id in (1,2,3)
没测试,呵呵
,[iPeriod]
,[cVouchType]
,[cVouchSType]
,[cVouchID]
,[dVouchDate]
,[dRegDate]
,[cDwCode]
,[cDeptCode]
,[cPerson]
,[cInvCode]
,[iBVid]
,[cCode]
,[cItem_Class]
,[cItemCode]
,[csign]
,[isignseq]
,[ino_id]
,[cDigest]
,[iPrice]
,[cexch_name]
,[iExchRate]
,[iDAmount]
,[iCAmount]
,[iDAmount_f]
,[iCAmount_f]
,[iDAmount_s]
,[iCAmount_s]
,[cOrderNo]
,[cSSCode]
,[cPayCode]
,[cProcStyle]
,[cCancelNo]
,[cPZid]
,[bPrePay]
,[iFlag]
,[cCoVouchType]
,[cCoVouchID]
,[cFlag]
,[cDefine1]
,[cDefine2]
,[cDefine3]
,[cDefine4]
,[cDefine5]
,[cDefine6]
,[cDefine7]
,[cDefine8]
,[cDefine9]
,[cDefine10]
,[iClosesID]
,[iCoClosesID]
,[cDefine11]
,[cDefine12]
,[cDefine13]
,[cDefine14]
,[cDefine15]
,[cDefine16]
FROM [Ap_Detail]
create proc proc1
@ids varchar(1000) -- such as '1,2,3'
,@types varchar(8000) -- such as '123,456,789'
as
begin
declare @tb table(id int, cVouchType varchar(8))
declare @index_1 int, @index_2 int
select @ids=@ids+',', @types=@types+','
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
while @index_1>0
begin
insert @tb select substring(@ids,1, @index_1-1),substring(@types,1, @index_2-1)
select @ids=stuff(@ids,1,@index_1,''),@types=stuff(@types,1,@index_2,'')
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
end insert into tbl_name(col1,col2,...,cVouchType)
select col1,col2,..., T.cVouchType
from tbl_name join @tb T where tbl_name.id=T.id
end
go
@ids varchar(1000) -- such as '1,2,3'
,@types varchar(8000) -- such as '123,456,789'
as
begin
declare @tb table(id int, cVouchType varchar(8))
declare @index_1 int, @index_2 int
select @ids=@ids+',', @types=@types+','
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
while @index_1>0
begin
insert @tb select substring(@ids,1, @index_1-1),substring(@types,1, @index_2-1)
select @ids=stuff(@ids,1,@index_1,''),@types=stuff(@types,1,@index_2,'')
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
end -- if [Auto_ID] is an identity column
insert into [Ap_Detail]([iPeriod],[cVouchType],...,[cDefine16])
select [iPeriod],b.cVouchType,...,[cDefine16]
from [Ap_Detail] a join @tb b where a.[Auto_ID]=b.id
end
go
(1 行受影响)(1 行受影响)
消息 515,级别 16,状态 2,过程 proc1,第 18 行
不能将值 NULL 插入列 'cVouchID',表 'Realtour2ERpNew.dbo.Ap_Detail';列不允许有空值。INSERT 失败。
语句已终止。
@ids varchar(1000) -- such as '1,2,3'
,@types varchar(8000) -- such as '123,456,789'
as
begin
declare @tb table(id int, cVouchSType varchar(8),cCancelNo varchar(40))
declare @index_1 int, @index_2 int
select @ids=@ids+',', @types=@types+','
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
while @index_1>0
begin
insert @tb select substring(@ids,1, @index_1-1),substring(@types,1, @index_2-1)
select @ids=stuff(@ids,1,@index_1,''),@types=stuff(@types,1,@index_2,'')
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
end -- if [Auto_ID] is an identity column
insert into [Ap_Detail] select [iPeriod]
,[cVouchType]
,b.[cVouchSType]
,[cVouchID]
,[dVouchDate]
,[dRegDate]
,[cDwCode]
,[cDeptCode]
,[cPerson]
,[cInvCode]
,[iBVid]
,[cCode]
,[cItem_Class]
,[cItemCode]
,[csign]
,[isignseq]
,[ino_id]
,[cDigest]
,[iPrice]
,[cexch_name]
,[iExchRate]
,[iDAmount]
,[iCAmount]
,[iDAmount_f]
,[iCAmount_f]
,[iDAmount_s]
,[iCAmount_s]
,[cOrderNo]
,[cSSCode]
,[cPayCode]
,[cProcStyle]
-- ,[cCancelNo]
,[cPZid]
,[bPrePay]
,[iFlag]
,[cCoVouchType]
,[cCoVouchID]
,[cFlag]
,[cDefine1]
,[cDefine2]
,[cDefine3]
,[cDefine4]
,[cDefine5]
,[cDefine6]
,[cDefine7]
,[cDefine8]
,[cDefine9]
,[cDefine10]
,[iClosesID]
,[iCoClosesID]
,[cDefine11]
,[cDefine12]
,[cDefine13]
,[cDefine14]
,[cDefine15]
,[cDefine16]
from [Ap_Detail] a join @tb b on a.[Auto_ID]=b.id
end
go
exec proc1 '50,51,61','50,51,61'--------------------------
cCancelNo varchar(40) 这个字段 现在的值是 BZAR0000000000001 位递
@ids varchar(1000) -- such as '1,2,3'
,@types varchar(8000) -- such as '123,456,789'
是外部输入的字符串数组,但是cCancelNo是按照 复制前数据 +1生成的,
比如说 原来是BZAR0000000000001 复制后的数据 对应字段是 BZAR0000000000002
这个怎么搞
--自己改成存储过程应该就可以了吧!
declare @in nvarchar(4000),@out nvarchar(4000)
set @in = '1,2,3'
set @out = '342,34,56'
declare @sql nvarchar(max),@in_temp nvarchar(4000)
set @in_temp=@in
set @sql = 'insert into tbl_name select id,case '
while (charindex(',',@in)>0) and (charindex(',',@out)>0)
begin
select @sql = @sql+' when id ='+convert(nvarchar(20),left(@in,charindex(',',@in)-1))+' then '+convert(nvarchar(20),left(@out,charindex(',',@out)-1))
set @in = stuff(@in,1,charindex(',',@in),'')
set @out =stuff(@out,1,charindex(',',@out),'')
end
select @sql=@sql+' as cVouchType from tbl_name where id in ('+@in_temp+')'
exec(@sql)
BZAR 是写死的 固定得,原来数据id=1,cCancelNo=BZAR0000000000015 把id=1 复制后了, 比如 id=4,cCancelNo=BZAR0000000000016再原来的基础上+1
alter proc proc1
@ids varchar(1000) -- such as '1,2,3'
,@types varchar(8000) -- such as '123,456,789'
as
begin
declare @tb table(id int, cVouchSType varchar(8),cCancelNo varchar(40))
declare @index_1 int, @index_2 int
select @ids=@ids+',', @types=@types+','
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
while @index_1>0
begin
insert @tb select substring(@ids,1, @index_1-1),substring(@types,1, @index_2-1)
select @ids=stuff(@ids,1,@index_1,''),@types=stuff(@types,1,@index_2,'')
select @index_1=charindex(',',@ids), @index_2=charindex(',',@types)
end -- if [Auto_ID] is an identity column
insert into [Ap_Detail] select [iPeriod],[cVouchType],b.[cVouchSType],[cVouchID],[dVouchDate]
,[dRegDate] ,[cDwCode] ,[cDeptCode] ,[cPerson]
,[cInvCode] ,[iBVid],[cCode],[cItem_Class]
,[cItemCode],[csign],[isignseq],[ino_id]
,[cDigest],[iPrice],[cexch_name],[iExchRate]
,[iDAmount],[iCAmount] ,[iDAmount_f] ,[iCAmount_f]
,[iDAmount_s] ,[iCAmount_s],[cOrderNo] ,[cSSCode]
,[cPayCode] ,[cProcStyle]
,[cCancelNo] = left([cCancelNo],4) + right('000000000000'+ltrim(cast(right([cCancelNo],13) as bigint)+1),13) --BZAR0000000000016
,[cPZid] ,[bPrePay],[iFlag],[cCoVouchType] ,[cCoVouchID]
,[cFlag] ,[cDefine1],[cDefine2] ,[cDefine3] ,[cDefine4]
,[cDefine5],[cDefine6] ,[cDefine7] ,[cDefine8],[cDefine9]
,[cDefine10] ,[iClosesID] ,[iCoClosesID] ,[cDefine11],[cDefine12]
,[cDefine13] ,[cDefine14] ,[cDefine15] ,[cDefine16]
from [Ap_Detail] a join @tb b on a.[Auto_ID]=b.id
end
go