0
CREATE TABLE #tmpCustomers(
[CustomerID] [int] NOT NULL,
[CustomerCode] [varchar](20) NULL,
[CustomerName] [varchar](128) NULL,
[LeftCount] [int] NULL,
[RightCount] [int] NULL,
[CreationDate][datetime]null,
)

DECLARE Customer_Cursor CURSOR FOR
SELECT customerid
FROM Customers
OPEN Customer_Cursor;

declare @left  int
declare @right int
declare @customerid int

FETCH NEXT FROM Customer_Cursor into @customerid
WHILE @@FETCH_STATUS = 0
BEGIN
  EXEC dbo.CountChildren @customerId,@left out,@right out

    insert into #tmpCustomers 
    select customerId,[CustomerCode],[CustomerName],(CONVERT(NUMERIC(38,2), Creationdate)),@left,@right from Customers where CustomerID=@customerid
   FETCH NEXT FROM Customer_Cursor into @customerid;
END;

select *, case when  leftcount>RightCount then RightCount else LeftCount end as Pairs from #tmpCustomers a
drop table #tmpCustomers
CLOSE Customer_Cursor;
DEALLOCATE Customer_Cursor;

这是代码,此代码给出以下错误:

消息 8115,级别 16,状态 2,第 24
行将表达式转换为数据类型日期时间的算术溢出错误。

请指导我如何设置它。

4

1 回答 1

0

我看到两件事看起来不对:

  1. 您正在将日期时间转换为数值,它为您提供自 1900-01-01 以来的天数(和小数天数)。我不明白为什么在您的代码中需要这样做。
  2. INSERT 语句中的列没有正确排列。您正在将一个 NUMERIC(18,2)值(由于CONVERT)插入一个整数字段,并将一个int值插入一个DATETIME字段。这可能就是您在CreationDate结果中看到错误值的原因。

我怀疑你想要类似的东西:

INSERT INTO #tmpCustomers 
SELECT 
    customerId,
    [CustomerCode],
    [CustomerName],
    @left,
    @right, 
    Creationdate
FROM Customers 
WHERE CustomerID=@customerid
于 2013-08-21T15:51:45.263 回答