大哥 我没太懂你的意思。 这个SQL insert into targettable(col1,col2....) select col1,col2.... from sourcetable where 你能用数据给我举两个例子么 谢谢。
大哥 我觉得你还是没明白我的意思。我给你举个数据的例子吧 表Order ID Quantity BoxQuantity AllotID 1 1000 500 P1234 2 1000 500 P1234 3 1000 500 P1234根据SQL语句 select dbo.CreateBarCode(Order.OrderID,Order.Quantity,Box.BoxQuantity) from Order inner join Box on Order.BoxID=Box.BoxID where Order.AllotID='P1234'会查出4条订单数据。 他们调用CreateBarCode函数,传入字段参数,CreateBarCode会调用4次在CreateBarCode函数的内部--生成条码的自定义函数 function CreateBarCode(@OrderID varchar,@Quantity int,@BoxQuantity int) return bit as begin declare @count int = @Quantity/@BoxQuantity; --1000/500 等于两条。那么同一个OrderID 会往BarCode表写两条数据 while(@count>0) begin --insert into BarCode ...此处省略 新增该订单条码数据 end end 一个OrderID的数据 会往BarCode表写两条数据 之前查了4条Order数据, BarCode就会新增8条数据。 我是这个逻辑 大哥的那个写法 insert xxx select 我用过。 但是数据和数据是一对一的。 中间没能做逻辑运算。 大哥你这下应该明白我的意思了吧。。
大哥 我觉得你还是没明白我的意思。我给你举个数据的例子吧 表Order ID Quantity BoxQuantity AllotID 1 1000 500 P1234 2 1000 500 P1234 3 1000 500 P1234根据SQL语句 select dbo.CreateBarCode(Order.OrderID,Order.Quantity,Box.BoxQuantity) from Order inner join Box on Order.BoxID=Box.BoxID where Order.AllotID='P1234'会查出4条订单数据。 他们调用CreateBarCode函数,传入字段参数,CreateBarCode会调用4次在CreateBarCode函数的内部--生成条码的自定义函数 function CreateBarCode(@OrderID varchar,@Quantity int,@BoxQuantity int) return bit as begin declare @count int = @Quantity/@BoxQuantity; --1000/500 等于两条。那么同一个OrderID 会往BarCode表写两条数据 while(@count>0) begin --insert into BarCode ...此处省略 新增该订单条码数据 end end 一个OrderID的数据 会往BarCode表写两条数据 之前查了4条Order数据, BarCode就会新增8条数据。 我是这个逻辑 大哥的那个写法 insert xxx select 我用过。 但是数据和数据是一对一的。 中间没能做逻辑运算。 大哥你这下应该明白我的意思了吧。。
应该可以不用函数的,以下举个简单的例子,希望对LZ有用.create table #t(orderid varchar(5),qty int)insert into #t select 'A',3 union all select 'B',5-- 产生3笔A记录和5笔B记录. select a.orderid,b.number from #t a cross apply (select number from master.dbo.spt_values where type='P' and number between 1 and a.qty) b/* orderid number ------- ----------- A 1 A 2 A 3 B 1 B 2 B 3 B 4 B 5(8 row(s) affected) */
用存儲過程嵌套不就可以實現了嗎 裡面的寫插入數據操作,外面的根據select dbo.CreateBarCode(Order.OrderID,Order.Quantity,Box.BoxQuantity) from Order inner join Box on Order.BoxID=Box.BoxID 這個的記錄循環執行裡面的存儲過程就可以拉。 自己可以嘗試寫下。
谢谢各位的热心回答, 这个问题我解决了,使用的for xml path ,将所有查询出来的数据按照自己定义的格式融合成一个字符串, 然后循环解析这个字符串, 拼接成新的sql语句(用于插入BarCode)。
大哥根据条件查询表Order的数据, 将符合条件的表Order数据写入表BarCode (一条表Order数据, 可能写入多条表BarCode,字段值不同)
你看清楚我的需求啊
不是一条数据从一个表插入另一个表。。
而是根据计算结果 从一个表插入N个数据到另一个表
表Order
ID Quantity BoxQuantity AllotID
1 1000 500 P1234
2 1000 500 P1234
3 1000 500 P1234根据SQL语句 select dbo.CreateBarCode(Order.OrderID,Order.Quantity,Box.BoxQuantity) from Order inner join Box on Order.BoxID=Box.BoxID where Order.AllotID='P1234'会查出4条订单数据。 他们调用CreateBarCode函数,传入字段参数,CreateBarCode会调用4次在CreateBarCode函数的内部--生成条码的自定义函数
function CreateBarCode(@OrderID varchar,@Quantity int,@BoxQuantity int)
return bit
as
begin
declare @count int = @Quantity/@BoxQuantity; --1000/500 等于两条。那么同一个OrderID 会往BarCode表写两条数据
while(@count>0)
begin
--insert into BarCode ...此处省略 新增该订单条码数据
end
end 一个OrderID的数据 会往BarCode表写两条数据
之前查了4条Order数据, BarCode就会新增8条数据。
我是这个逻辑
大哥的那个写法 insert xxx select 我用过。 但是数据和数据是一对一的。 中间没能做逻辑运算。
大哥你这下应该明白我的意思了吧。。
表Order
ID Quantity BoxQuantity AllotID
1 1000 500 P1234
2 1000 500 P1234
3 1000 500 P1234根据SQL语句 select dbo.CreateBarCode(Order.OrderID,Order.Quantity,Box.BoxQuantity) from Order inner join Box on Order.BoxID=Box.BoxID where Order.AllotID='P1234'会查出4条订单数据。 他们调用CreateBarCode函数,传入字段参数,CreateBarCode会调用4次在CreateBarCode函数的内部--生成条码的自定义函数
function CreateBarCode(@OrderID varchar,@Quantity int,@BoxQuantity int)
return bit
as
begin
declare @count int = @Quantity/@BoxQuantity; --1000/500 等于两条。那么同一个OrderID 会往BarCode表写两条数据
while(@count>0)
begin
--insert into BarCode ...此处省略 新增该订单条码数据
end
end 一个OrderID的数据 会往BarCode表写两条数据
之前查了4条Order数据, BarCode就会新增8条数据。
我是这个逻辑
大哥的那个写法 insert xxx select 我用过。 但是数据和数据是一对一的。 中间没能做逻辑运算。
大哥你这下应该明白我的意思了吧。。
兄弟啊,select时是可以对选择的数据进行汇总的啊,别一根筋啊, 不知道你那插入的数据生成规则,没法给你写出来。不过看你问的问题,真替你着急啊。
select 'A',3 union all
select 'B',5-- 产生3笔A记录和5笔B记录.
select a.orderid,b.number
from #t a
cross apply
(select number
from master.dbo.spt_values
where type='P' and number between 1 and a.qty) b/*
orderid number
------- -----------
A 1
A 2
A 3
B 1
B 2
B 3
B 4
B 5(8 row(s) affected)
*/
裡面的寫插入數據操作,外面的根據select dbo.CreateBarCode(Order.OrderID,Order.Quantity,Box.BoxQuantity) from Order inner join Box on Order.BoxID=Box.BoxID 這個的記錄循環執行裡面的存儲過程就可以拉。
自己可以嘗試寫下。
然后循环解析这个字符串, 拼接成新的sql语句(用于插入BarCode)。