1

XML 文字列をパラメーターとして使用する SQL Server ストアド プロシージャがあります。dd/MM/yyyyXML 文字列には、日付形式の日付タグがあります。を使用するOpenXMLと、変換エラーが発生します。SQLユーザーログインを持っていても、デフォルトの言語設定はBritish English. MM-dd-yyyy日付形式で問題なく動作します。

これは私のコードです

Declare    @XML Nvarchar(MAX)                  
Set @XML=   '<root><ContractNo>100213</ContractNo><ContractDate>25/6/2012</ContractDate></root>'

Declare @idoc int

-- Create an internal representaion of XML                          
EXEC sp_xml_preparedocument @idoc OUTPUT, @XML                          

-- Get the data from XML into respective variables                          
SELECT   ContractNo                          
,ContractDate                             
FROM OPENXML(@idoc,'root',2)                          
WITH ( ContractNo nvarchar(30)                          
,ContractDate Datetime                         
) 

エラー:

メッセージ 241、レベル 16、状態 1、行 10
文字列から日付や時刻を変換するときに、変換に失敗しました。

4

3 に答える 3

2

参考までに、SQL Server 2005 以降を使用しているため、XML データ型と XQuery の使用を開始する必要があります。

Declare @XML nvarchar(max);
Set @XML = '<root><ContractNo>100213</ContractNo>
            <ContractDate>25/6/2012</ContractDate></root>';
DECLARE @realXML xml;
set @realXML = @XML;

SELECT @realXML.value('(/root/ContractNo)[1]', 'varchar(max)') ContractNo,
       CONVERT(DATETIME,
               @realXML.value('(/root/ContractDate)[1]', 'varchar(max)'),
               103) ContractDate;

CONVERT()日付を柔軟に処理できますが、必要に応じてdateformat設定を行うこともできます。イギリス英語には、データで機能する「dmy」設定があります。他の何かが日付形式をリセットしていないことを確認してください。それ以外の場合は、バッチの前に明示的に設定してください。たとえば、これは機能します:

set dateformat dmy;

Declare @XML nvarchar(max);
Set @XML = '<root><ContractNo>100213</ContractNo>
            <ContractDate>25/6/2012</ContractDate></root>';
DECLARE @realXML xml;
set @realXML = @XML;

SELECT @realXML.value('(/root/ContractNo)[1]', 'varchar(max)') ContractNo,
       @realXML.value('(/root/ContractDate)[1]', 'datetime') ContractDate;
于 2012-11-12T10:27:29.480 に答える
1

スタイル 103 を使用して、日付を取得し、フィールド リストでconvertvarcharを使用できます。dd/mm/yyyy

SELECT   ContractNo                          
,CONVERT(datetime, ContractDate, 103) as ContractDate
FROM OPENXML(@idoc,'root',2)                          
WITH ( ContractNo nvarchar(30)                          
,ContractDate varchar(10)                         
) 
于 2012-11-12T10:24:36.443 に答える
0
        Declare    @XML Nvarchar(MAX)                  
        Set @XML=   '<root><ContractNo>100213</ContractNo><ContractDate>25/6/2012</ContractDate></root>'

        Declare @idoc int

        -- Create an internal representaion of XML                          
        EXEC sp_xml_preparedocument @idoc OUTPUT, @XML                          

        -- Get the data from XML into respective variables                          
        SELECT   ContractNo                          
        ,Convert(Datetime, ContractDate,103)                            
        FROM OPENXML(@idoc,'root',2)                          
        WITH ( ContractNo nvarchar(30)                          
        ,ContractDate nvarchar(10)                        
        ) 
于 2012-11-12T10:28:18.730 に答える