如何将 SqlParameter 值设置为 SQL 函数的结果

本文关键字:SQL 函数 结果 设置 SqlParameter | 更新日期: 2023-09-27 18:33:06

(与这篇文章相关,但不一样。

有没有办法使用 SqlParameter 来指定应该通过在服务器上调用函数来获取值? 例如

private void Test()
{
    var cmd = new SqlCommand("update Table set ADateField = @p1 where Id = @id");
    cmd.Parameters.AddWithValue("@id", 42);
    cmd.Parameters.AddWithValue("@p1", "sysutcdatetime()");  // WRONG!!
    cmd.ExecuteNonQuery();
}

我可以在 CommandText 字符串中嵌入调用,但有时我想设置一个显式值而不是调用函数,所以它变得有点混乱。

我不想在客户端计算机上获取日期,因为由于时区差异,这可能与服务器上的日期不同。

从文档中我看不出如何做到这一点,但我想我会在放弃之前与你们核实一下。谢谢!

如何将 SqlParameter 值设置为 SQL 函数的结果

不能将函数名称作为参数传递并执行它。

如果你知道函数名称,为什么不直接使用它:

var cmd = 
 new SqlCommand("update Table set ADateField = sysutcdatetime() where Id = @id");

我不相信这是可以做到的。两个选项是重写SQL语句,具体取决于您是否要传递确切的日期,或者将SQL嵌入到存储过程中,然后可以检查传入的参数以查看它是null还是其他内容,并替换正确的函数调用:

var cmd = new SqlCommand("update Table set ADateField = @p1 where Id = @id");
cmd.Parameters.AddWithValue("@id", 42);
if( useFunction )
{
  cmd.CommandText = cmd.CommandText.Replace("@p1", "sysutcdatetime()");
}
else
{
  cmd.Parameters.AddWithValue("@p1", exactDate);  
}
cmd.ExecuteNonQuery();