【问题标题】:Declaring DATETIME in Stored proc MS SQL在存储过程 MS SQL 中声明 DATETIME
【发布时间】:2020-11-24 15:10:47
【问题描述】:

当使用 MS SQL 中存储的 Proc 将新行插入或更新到表中时,我正在尝试获取列的系统日期时间。我怎样才能实现它? 我试过下面的代码

CREATE PROCEDUCE test_Cl_INSERT
@SRC_ID int,
@CREATED_BY datatime
AS 
BEGIN
INSERT into dbo.CL_Batch(SRC_ID, Created_BY)
VALUES(@SRC_ID, CURRENT_TIMESTAMP)
END

EXEC dbo.test_Cl_INSERT
@SRC_ID=44

错误:@CREATED_BY 参数丢失

【问题讨论】:

  • 考虑到您在过程中没有引用@CREATED_BY,为什么需要它?
  • "END" 不会终止存储过程的代码,因此 EXEC 语句也是过程的一部分。
  • 我这里提到的代码是示例一。我的表中有很多列。
  • @SM我将分别执行Stored proc和EXEC语句!
  • “我在这里提到的代码是示例一。我的表中有很多列。” 这并没有改变我的说法。在您给出的示例中,您没有引用@CREATED_BY,因此没有任何意义。只有当您不将其包含在您的 EXEC 语句中时,才会进一步巩固这一点。如果您上面给出的示例不能代表您拥有的实际代码,请发布 有代表性的内容。

标签: sql-server mssql-jdbc


【解决方案1】:

这将起作用:

CREATE PROCEDURE test_Cl_INSERT
@SRC_ID int 
AS 
BEGIN
INSERT into dbo.CL_Batch(SRC_ID, Created_BY)
VALUES(@SRC_ID, CURRENT_TIMESTAMP)
END

执行 dbo.test_Cl_INSERT @SRC_ID=44

【讨论】:

    【解决方案2】:

    你的程序签名是:

    CREATE PROCEDUCE test_Cl_INSERT
      @SRC_ID int,
      @CREATED_BY datatime
    

    您尝试执行为:

    EXEC dbo.test_Cl_INSERT @SRC_ID=44
    

    您发现缺少什么了吗?你应该。您的过程有 2 个参数,但您在尝试执行时只提供了 1 个。那是你的问题。如前所述,您没有在过程逻辑中使用该参数,那么它为什么存在呢?

    你必须像这样执行你的程序:

    EXEC dbo.test_Cl_INSERT @SRC_ID=44, @CREATED_BY = '20201124 12:49'; 
    

    请注意,我只是为参数分配了一个随机值,因为它(参数)未在您的过程代码中使用。这解决了你问的问题。但是,您还有更重要的问题需要考虑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多