【发布时间】:2016-10-10 00:15:01
【问题描述】:
我有一个存储过程正在接收 xml 参数,现在 xml 包含日期和时间字段
这是我的 xml 示例,它作为参数传递给存储过程。我正在使用 SQL Server 2005
<transdetails>
<_x005B_Sheet1_x0024__x005D_>
<Date_of_transaction>2011-07-29T13:47:34+05:00</Date_of_transaction>
<Type_of_the_transaction>card</Type_of_the_transaction>
<Card_number>7000460000451470</Card_number>
<Total_quantity>27.81</Total_quantity>
<Total_amount>2419.75</Total_amount>
<Name_of_Retail_Outlet>MIDWAY PETROLEUM SERVICES</Name_of_Retail_Outlet>
<Product_Purchased>PETROL</Product_Purchased>
</_x005B_Sheet1_x0024__x005D_>
<transdetails>
这里是存储过程
ALTER PROCEDURE [dbo].[usp_getexceldata]
@transdetails xml
AS
SET NOCOUNT ON
SET ARITHABORT ON
BEGIN
DECLARE @XML AS XML
DECLARE @DestinationTemp TABLE (ID INT IDENTITY(1,1),
Date_of_transaction VARCHAR,
Type_of_the_transaction nvarchar(255),
Card_number nvarchar(255),
Total_quantity float,
Total_amount float,
Name_of_Retail_Outlet nvarchar(255),
Product_Purchased nvarchar(255)
)
SET @XML = @transdetails
INSERT INTO @DestinationTemp(Date_of_transaction, Type_of_the_transaction, Card_number, Total_quantity, Total_amount, Name_of_Retail_Outlet, Product_Purchased)
SELECT
x.d.query('./Date_of_transaction').value('.' , 'DateTime') Date_of_transaction,
x.d.query('./Type_of_the_transaction').value('.', 'nvarchar(255)') Type_of_the_transaction,
x.d.query('./Card_number').value('.', 'nvarchar(255)') Card_number,
x.d.query('./Total_quantity').value('.' ,'float') Total_quantity,
x.d.query('./Total_amount').value('.' , 'float') Total_amount,
x.d.query('./Name_of_Retail_Outlet').value('.' ,'nvarchar(255)') Name_of_Retail_Outlet,
x.d.query('./Product_Purchased').value('.', 'nvarchar(255)') Product_Purchased
FROM
@XML.nodes('transdetails//_x005B_Sheet1_x0024__x005D_') x(d)
SELECT * FROM @DestinationTemp
现在我在尝试将 Date_of_transaction 转换为 datetime 时遇到错误,如果我尝试将值最初设置为 varchar 然后它返回整数值,例如如果我有日期
2011-07-29T13:47:34+05:00
它会返回我 2...请帮助?
【问题讨论】:
标签: sql-server-2005 tsql