2016-11-30 14 views
8

शुभ दिन एसक्यूएल सर्वर से PHP के साथ XML स्वरूप भेजने के लिए, मैं अपनी वेबसाइट (PHP) से एक XML फ़ाइल आयात करने की कोशिश कर रहा हूँ है। मैं इसके बारे में कुछ शोध करते हैं और मैं C# के लिए इस Passing datatable to a stored procedure लेकिन वह नहीं मिला। तो, क्या इसे भेजना संभव है? 22018/206यह संभव

:

यहाँ मेरी संग्रहीत प्रक्रिया

USE [sales_web] 
GO 
/****** Object: StoredProcedure [dbo].[InsertSALESPOS] Script Date: 11/30/2016 09:19:48 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 


ALTER PROCEDURE [dbo].[InsertSALESPOS] 

@HeaderTemp HeaderTemp readonly,     
@DetailTemp DetailTemp readonly,     
@PaymentTemp PaymentTemp readonly,     
@VoucherTemp VoucherTemp readonly,     
@LedgerTemp LedgerTemp readonly     

AS     
BEGIN   

set nocount on; 

begin try     
begin transaction     

select ID, TransactionNo, TransactionDate, TotalTransaction, LocationID, UserID, CustomerCode, SendStatus  
into #HeaderTemp from @HeaderTemp    
where TransactionNo not in(SELECT TransactionNo from TransactionHeader with(nolock))     

    INSERT INTO dbo.SalesOrderHeader (TransactionNo, DocumentNo, TransDate, ETADate, ExternalDocument, Reference, RefTransNo, Category, CustomerCode, Remark, Remark2, TermOfPayment,     
    Currency, Rate, UseVAT, SubTotal, DiscPercent, DiscAmount, GrandTotal, TotalReceivable, FromCustomerCode, PostingStatus, PostingBy, PostingDate, CreatedDate, CreatedBy, ModifiedDate,     
    ModifiedBy, CustomerReceivable, LocationCode, VatPercent, VatAmount, FinalReleasedDate_Outlet)     
select h.TransactionNo, h.TransactionNo as DocumentNo, cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as TransDate,     
    cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as ETADate, '' as ExternalDocument, '' as Reference, '' as RefTransNo,     
    'POS' as Category, h.CustomerCode, '' as Remark, '' as Remark2, Cast('' as Datetime) as TermOfPayment, 'IDR' as Currency, Cast(1 as Float) as Rate,     
    Cast(0 as Bit) as UseVAT, Cast(SUM(d.TotalAmountAfterDisc) as Float) as SubTotal, Cast(0 as Float) as DiscPercent, Cast(0 as Float) as DiscAmount,     
    Cast(SUM(d.TotalAmountAfterDisc) as Float) as GrandTotal, Cast(SUM(d.TotalAmountAfterDisc) as Float) as TotalReceivable,     
    h.CustomerCode as FromCustomerCode, Cast(0 as Bit) as PostingStatus, '' as PostingBy, Cast('' as Datetime) as PostingDate,     
    cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as CreatedDate, h.UserID as CreatedBy,     
    cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as ModifiedDate, h.UserID as ModifiedBy, h.CustomerCode as CustomerReceivable,     
    h.CustomerCode as LocationCode, Cast(0 as Float) as VatPercent, Cast(0 as Float) as VatAmount, cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as FinalReleasedDate_Outlet     
    from @HeaderTemp h     
    Inner Join @DetailTemp d on h.id = d.TransactionID and h.CustomerCode = d.CustomerCode     
Where h.TransactionNo IN (select TransactionNo from #HeaderTemp with(nolock))     
    Group By h.TransactionNo, TransactionDate , h.CustomerCode, h.UserID     

    Insert Into dbo.SalesOrderDetail     
SELECT h.TransactionNo + '-' + Cast(ROW_NUMBER() Over(Order By h.TransactionNo) as Varchar) as TransactionNo, h.TransactionNo as SalesOrderTransNo,     
    h.TransactionNo as RefTransNo, (ROW_NUMBER() Over(Order By h.TransactionNo))*1000 as [LineNo], isnull(d.ItemCode,''), d.Quantity, isnull(d.MainUOMCode,'') as UOM,     
    d.UnitPrice, 0 as DiscountPercent, 0 as VatPercent, (d.Quantity*d.UnitPrice) as AmountPrice,     
    ((d.Quantity*d.UnitPrice)-d.TotalAmountAfterDisc) as AmountDiscount, 0 as AmountVat,     
    d.TotalAmountAfterDisc as Total, d.TotalAmountAfterDisc as Receivable,     
d.UnitPrice as UnitPriceAfterReceivable, '' as ExtraRemark, '' as ExtraRemark2,      
    cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as CreatedDate, h.UserID as CreatedBy,      
    cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime) as ModifiedDate, h.UserID as ModifiedBy     
    from @HeaderTemp h      
    Inner Join @DetailTemp d on h.id = d.TransactionID and h.CustomerCode = d.CustomerCode     
Where h.TransactionNo IN (select TransactionNo from #HeaderTemp with(nolock))      

    Insert Into dbo.SalesOrderPayment     
Select h.TransactionNo + '-' + Cast(ROW_NUMBER() Over(Order By h.TransactionNo) as Varchar) as TransactionNo, h.TransactionNo as SalesOrderTransNo,     
    p.PaymentMethodCode, p.TotalDue, p.TotalTendered     
    From @HeaderTemp h     
    Left Join @PaymentTemp p on h.id = p.TransactionID     
    and h.CustomerCode = p.CustomerCode     
    Where h.TransactionNo IN (select TransactionNo from #HeaderTemp with(nolock))     
--cast(left(h.TransactionDate,len(h.TransactionDate)-6) as datetime)     

    Insert Into dbo.SalesOrderVoucher     
Select h.TransactionNo + '-' + Cast(ROW_NUMBER() Over(Order By h.TransactionNo) as Varchar) as TransactionNo, h.TransactionNo as SalesOrderTransNo,     
    v.VoucherVendor as Voucher, Case When v.VoucherType = '1' Then 'NOMINAL' Else 'PERCENT' End as VoucherType, v.VoucherValue, v.VoucherAmount     
    From @HeaderTemp h     
    Left Join @VoucherTemp v On h.CustomerCode = v.CustomerCode And h.ID = v.TransactionID     
Where h.TransactionNo IN (select TransactionNo from #HeaderTemp with(nolock))  

    Insert Into dbo.ItemLedgerEntry(TransactionNo, SequenceNo, DocumentNo, EntryType,      
CustomerCode, ItemCode, PostingDate, Quantity, UomCode, CreatedDate, CreatedBy)     
Select TransactionNo, SequenceNo, DocumentNo, EntryType,     
CustomerCode, ItemCode, cast(left(PostingDate,len(PostingDate)-6) as datetime) as PostingDate, Cast(Quantity as Float) as Quantity, UomCode, cast(left(CreatedDate,len(CreatedDate)-6) as datetime) as CreatedDate, CreatedBy      
    From @LedgerTemp     
Where DocumentNo in (select Transactionno from #HeaderTemp with(nolock))     



drop table #HeaderTemp     
Select 'Succes' as [Status] 
commit transaction     
end try     
begin catch     
rollback       
    insert into XMLLOGERROR values(getdate(), 'SALESPOS', ERROR_MESSAGE()) 
end catch     
end  

मैं अपने स्क्रिप्ट के साथ इस तरह से

$xml=simplexml_load_file($file); 
        $HeaderTemp  = array(); 
        $DetailTemp  = array(); 
        $PaymentTemp = array(); 
        $LedgerTemp  = array(); 
        $VoucherTemp = array(); 
        $tambahan = array('session_id' => date('d:h:i:s')); 
        $login = str_replace(' ', '', $this->input->cookie('cookie_webstore_user')); 
        $session = $login.$tambahan['session_id']; 

        foreach ($xml->HeaderTemp as $HeaderTempnya) 
           { 
            $HeaderTemp[] = $HeaderTempnya; 
           } 
          foreach ($xml->DetailTemp as $DetailTempnya) 
           { 
            $DetailTemp[] = $DetailTempnya; 
           } 
          foreach($xml->PaymentTemp as $PaymentTempnya) 
           { 
            $PaymentTemp[] = $PaymentTempnya; 
           } 
          foreach($xml->LedgerTemp as $LedgerTempnya) 
           { 
            $LedgerTemp[] = $LedgerTempnya; 
           } 
          foreach($xml->VoucherTemp as $VoucherTempnya) 
           { 
            $VoucherTemp[] = $VoucherTempnya; 
           }   

        if($VoucherTempnya != ""){ 
        $this->modelmodel->showsingle("[InsertSALESPOS] '{$HeaderTemp}','{$DetailTemp}','{$PaymentTemp}','{$VoucherTemp}','{$LedgerTemp}'"); 
        }else{ 
        $this->modelmodel->showsingle("[InsertSALESPOS] '{$HeaderTemp}','{$DetailTemp}','{$PaymentTemp}','','{$LedgerTemp}'"); 
        } 

कोशिश ऊपर मैं इस त्रुटि

त्रुटि संख्या प्राप्त है

[माइक्रोसॉफ्ट] [एसक्यूएल सर्वर मूल क्लाइंट 10.0 ] [एसक्यूएल सर्वर] ओपेरैंड प्रकार संघर्ष: डी::/XAMPP/htdocs/varchar HeaderTemp

[InsertSALESPOS] 'सरणी', 'सरणी', 'सरणी', '', 'सरणी'

फ़ाइल नाम के साथ असंगत है new_store/system/डेटाबेस/DB_driver.php

लाइन संख्या: 691

मेरा बुरा अंग्रेजी के लिए खेद है।

ठीक है। मैंने अपनी समस्या को अलग-अलग तरीके से हल कर लिया है। यदि असंभव हो तो मैं इसके बारे में उत्सुक हूं, कृपया बताएं क्यों।

+2

मैं PHP पर विश्वास नहीं है में प्रत्येक पाश में डालने बयान वर्तमान मूल्य का उपयोग कर निष्पादित करने के लिए कोशिश कर रहे हैं TVPs का समर्थन करता है। मेरा मानना ​​है कि आपको या तो एक्सएमएल या स्ट्रिंग पास करना होगा और एसक्यूएल इसे पार्स कर देगा और इसे अपने प्रश्नों के लिए टेबल में तोड़ देगा। – ZLK

+0

मुझे आशा है कि यह लिंक उपयोगी होगा http://stackoverflow.com/questions/2060599/php-sql-server-table-value-parameter/2060793#2060793 – SergeyLebedev

+0

@ सेर्गेई लेबेडेव, अब तक अभी तक समर्थित नहीं है? – YVS1102

उत्तर

-1

आप PHP का उपयोग करने के रूप में यह सीधे MySQL के माध्यम से डाला जा सकता है की जरूरत नहीं है। कमांड यह होगी

LOAD XML LOCAL INFILE '/pathtofile/file.xml' 
INTO TABLE my_tablename(col1, col2, ...); 

लोड हो रहा है XML डेटा के बारे में अधिक जानकारी के लिए की तरह पढ़ openrowset कमांड के साथ Mysql डॉक्स here

+5

एसक्यूएल सर्वर! = MySQL – Leith

2

यह संभव है, एसक्यूएल सर्वर में एक तालिका में xml लोड करने के लिए अधिक जानकारी के लिए के माध्यम से जाना लिंक https://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/

+0

तो, 'php' के साथ, आप इसे कैसे भेजते हैं? – YVS1102

+0

उन एसक्यूएल स्टेटमेंट को संग्रहीत प्रक्रिया में पैरामीटर के रूप में फ़ाइल नाम के साथ लिखें और फिर इसे php से कॉल करें। –

0

ऐसा लगता है कि आप एक क्षेत्र है, जहां फ़ील्ड प्रकार एक varchar के रूप में परिभाषित किया गया है के लिए एक मूल्य के रूप में एक सरणी का उपयोग करने की कोशिश कर रहे हैं।

आप चाहिए पाश सच सरणी आप अब डालने के लिए इस्तेमाल करते हैं और पाश

+0

हाँ। मुझे पता है। मैंने वह किया है। क्या मैं इसे एक्सएमएल प्रारूप में भेज सकता हूं। – YVS1102

संबंधित मुद्दे