2015-02-23 107 views
0

请问如何使用带有存储过程的Microsoft SQL Server 2012显示插入到归档表格中的行数。我的代码显示如下。我跑的代码成功,但在调用存储过程,我得到了错误消息指出显示从现有表格插入到表格中的行数

消息8114,级别16,状态5
过程p_moveTransHisttoArchive3a,行0错误转换数据类型为varchar到日期时间。

这里是我的代码:

IF OBJECT_ID(N'Production.p_moveTransHisttoArchive3a', N'P') IS NOT NULL 
    DROP PROCEDURE Production.p_moveTransHisttoArchive3a; 
GO 

CREATE PROCEDURE Production.p_moveTransHisttoArchive3a 
    @FiveDaysAgo DATETIME 
AS 
    SET NOCOUNT ON; 

BEGIN 
     DECLARE @counter INT; 
     SET @counter = @@ROWCOUNT 
     INSERT INTO Production.TransactionHistoryArchive 
      SELECT* 
      FROM Production.TransactionHistory 
      WHERE TransactionDate <= @FiveDaysAgo 
      RETURN @counter --No of rows moved 
END; 
GO 
+0

你需要'SET @counter = @@ ROWCOUNT'(或只是'RETURN @@ ROWCOUNT')* *后的'INSERT' – 2015-02-23 19:22:10

+1

标题是无关向你展示错误......大概是' TransactionDate'不是'DATETIME'。 – 2015-02-23 19:22:46

+0

你需要明确你的陈述。您应该在插入和用于填充它的选择中按名称列出所有列。 – 2015-02-23 19:26:01

回答

1

下面是一些接近你想要什么,我认为。为什么您的入站参数名为FiveDaysAgo?如果您想要始终获取超过五天前属于INSIDE内部的行,而不是作为参数。

CREATE PROCEDURE Production.p_moveTransHisttoArchive3a 
    @FiveDaysAgo DATETIME 
    , @RowCount int OUTPUT 
AS 
    set nocount on; 

    INSERT INTO Production.TransactionHistoryArchive 
    (
     Col1 
     , Col2 
    ) 
    SELECT Col1 
     , Col2 
    FROM Production.TransactionHistory 
    WHERE TransactionDate <= @FiveDaysAgo 

    select @RowCount = @@ROWCOUNT