要操作订单时,需要先把订单的数据放入到数据库中,然后进行排单操作。以前的做法是先把数据放入数据库中的一张表中。然后再操作。还有一个方法是反需要操作的数据作为参数传入数据库中,然后直接操作。
首先建立一个存储过程,把一串字符输出为表的形式。
<pre name="code" class="sql">ALTER proc [dbo].[pc_getRowFromText](@text varchar(8000),@spltchar char(1))
as
--declare @text varchar(8000),@spltchar char(1);
begin
--set @text='00648,10,216,10,0';
--set @spltchar=',';
declare @selecttext varchar(8000);
set @selecttext='select ' + ''''+REPLACE(@text,@spltchar,''',''') + '''';
execute(@selecttext);
end
GO
然后在需要使用的地方建立 相应的表格。
declare @backorder nvarchar(2000);
set @backorder='1024;12.00;10;1,1034;12.00;10;1,1044;12.00;10;1';
declare @tb table(code varchar(20),price varchar(20),qut varchar(20),giftqut varchar(20))--建立一个表变量
--create table #tb(batsaleno varchar(30));
declare @commalast int,@commaCurrent int;
declare @singleCmdText varchar(30);
set @commalast=0;
while 1=1
begin
set @commaCurrent=CHARINDEX(',',@backorder,@commalast);
if @commaCurrent>0
set @singleCmdText=SUBSTRING(@backorder,@commalast,@commaCurrent-@commalast);
else
set @singleCmdText=SUBSTRING(@backorder,@commalast,LEN(@backorder)-@commalast+1);
set @commalast=@commaCurrent+1;
insert @tb exec pc_getRowFromText @text=@singleCmdText,@spltchar=';'
if @commaCurrent=0
break;
end
select * from @tb
最后进行类型的转换得到表格
create table #tb(code varchar(20),price decimal(14,2),qut int,giftqut int);
insert #tb(code,price,qut,giftqut)
select code,Convert(decimal(14,1),price),Convert(int,qut) ,Convert(int,giftqut) from @tb;
select * from #tb;