そのため、倉庫を列形式で、品目コードを行形式で含む Excel ファイルがあります。私のテーブルのDBには、行形式の倉庫コードとアイテムコードがあります。各アイテムの在庫 (列形式で存在する Excel) をすべての倉庫でそれぞれ更新する必要があります。C#(フロントエンド)では、ループを適用することで実現できます。しかし、ループは奇数 2,25,000 回実行されています。アイテム コードの在庫値を倉庫で更新するには、約 10 時間かかります。そこで、Excelシートから倉庫コードをそのまま取得し、列(倉庫コード)を行にすることを提案しています。私はほとんどそこにいますが、前の質問で言ったように、列の名前を取得していますが、その値は取得していません。解決策を提案してください。
質問する
142 次
1 に答える
0
私は答えを得て、2つのwhileループを書き、列名とその値を動的に細かくすることができました
DECLARE @intFlag INT
declare @count int
declare @count1 int
set @count1 = (select min(srno) from TEMP_STOCK_uPDATE)
declare @f varchar(20)
declare @wh varchar(20)
SET @intFlag = 1
set @count = (select max(srno) from dbo.TEMP_STOCK_uPDATE)
declare @col_Count int
set @col_Count = (select count(*) NoOfColumns from SYSCOLUMNS
WHERE id= (Select id from SYSOBJECTS where name = 'TEMP_STOCK_uPDATE'))
--select @col_Count
declare @cnt int
set @cnt=4
--select @intFlag
--select @count1
--select @count
--select @cnt
--select @col_Count
while(@count1<=@count)
begin
while(@cnt<=@col_Count-1)
begin
declare @whcode varchar(20)
set @whcode=(SELECT COLUMN_NAME
FROM Ecata_New.INFORMATION_SCHEMA.COLUMNS
where Table_Name = 'TEMP_STOCK_uPDATE'
and COLUMN_NAME =(select whcode from dbo.temp_stock_map where func=(select func from dbo.temp_stock_map where sr_no=(@cnt-3))))
--select @whcode
DECLARE @SQL VARCHAR(4000)
--SET @SQL = 'select ' + @whcode + ' from TEMP_STOCK_uPDATE where F1=(select F1 from dbo.TEMP_STOCK_uPDATE where srno='+convert(varchar,16091)+')'
SET @SQL = 'select ' + @whcode + ' from TEMP_STOCK_uPDATE where srno='+convert(varchar,@count1)
--print @SQL
--EXEC (@SQL)
declare @tab table
(value1 varchar(20))
insert into @tab EXEC (@SQL)
declare @value2 varchar(20)
set @value2=(SELECT * from @tab)
declare @final decimal(10,2)
if(@value2 is null)
set @final=0.00
else
set @final = @value2
update dbo.tbl_wh_Itemwise
set
whItm_OP_STK_Qty=@final,
whItm_Creation_DT=getdate()
where
whItm_item_code=(select F1 from dbo.TEMP_STOCK_uPDATE where srno=@count1)
and
whItm_wh_code=(select func from dbo.temp_stock_map where sr_no=(@cnt-3))
delete from @tab
set @cnt=@cnt+1
end
set @cnt =4
set @count1=@count1+1
end
于 2013-06-21T06:44:25.860 に答える