Sql需要声明标量

时间:2016-06-02 13:05:47

标签: sql sql-server

以下sql(Sql Server 2016)生成错误:

INSERT INTO Requests (EntryDate,Status, AccountID)
VALUES (@EntryDate,@Status,@accountID)"; 
        try
        { 
            DatabaseConnection.Execute(sql,
    new
    {             
        DateTime.Now,
        Status = (int)Status.New, '''an enum
        accountID,             
    }, this.Transaction);

这会产生错误:

 Must declare scalar variable @EntryDate.

如果我用getdate()替换@EntryDate,则运行正常。即使看起来似乎没有使用getdate()。为什么这个值?

1 个答案:

答案 0 :(得分:1)

@EntryDate是您的命令的参数。您必须提供它,即使该值未使用,否则SQL Server将查找名为@EntryDate的变量(同样不存在)。

如果您编写new { DateTime.Now, ... },则传递的匿名对象具有名为Now的属性,该属性无法映射到实际参数。将DateTime.Now更改为EntryDate = DateTime.Now,以便名称匹配。问题没有指定你正在使用哪个对象关系映射器(Dapper?),但它们都需要以某种方式传递命名参数。