【发布时间】:2021-11-05 00:39:46
【问题描述】:
我有一个在 sql 中运行良好的标量函数。我需要在 c# 中调用该函数。标量函数如下:
CREATE FUNCTION [dbo].[usfMGAHolidayCalendar](@MGAID INT, @MaskDate DATE)
RETURNS DATE
AS
/*Returns the NewFileMask*/
BEGIN
DECLARE @NewMaskDate DATETIME,
@IsMGAHolidayCalendar INT = 0;
SET @IsMGAHolidayCalendar =
(
SELECT COUNT(HolidayDate)
FROM xml.MGAHolidayCalendar
WHERE HolidayDate = @MaskDate
AND MgaId = @MGAID
);
IF @IsMGAHolidayCalendar > 0
/*Return @NewMaskDate (@MaskDate + 1)*/
SET @NewMaskDate = DATEADD(dd, 1,@MaskDate)
ELSE
/*Return the original @MaskDate as @NewMaskDate*/
SET @NewMaskDate = @MaskDate
/*Sometimes there are two holidays in a row (e.g. Thanksgiving & Thanksgiving Friday)*/
/*Check the table for the NewMaskDate*/
SET @IsMGAHolidayCalendar =
(
SELECT COUNT(HolidayDate)
FROM xml.MGAHolidayCalendar
WHERE HolidayDate = @NewMaskDate
AND MgaId = @MGAID
);
IF @IsMGAHolidayCalendar = 1
/*Return @NewMaskDate (@NewMaskDate + 1)*/
SET @NewMaskDate = DATEADD(dd, 1,@NewMaskDate)
ELSE
/*Return the original @NewMaskDate as @NewMaskDate*/
SET @NewMaskDate = @NewMaskDate
RETURN @NewMaskDate;
我开始在 C# 中调用 Scalar 函数,这就是我目前所拥有的。我需要一些指导/帮助来完成它。
//调用dbo.usfGetMGAHolidayCalendar并返回NewMaskDate//
static void Main(string[] args)
{
//Set the connection string//
try
{
//sql connection object
using (SqlConnection conn = new SqlConnection(connString))
{
//define the query text
string query = @"SELECT dbo.usfGetMGAHolidayCalendar(@MGAID, @MaskDate) As NewMaskDate;";
//parameter value will be set from command line
SqlCommand cmd = new SqlParameter("dbo.usfGetMGAHolidayCalendar", conn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@MGAID", SqlDbType.Int);
cmd.Parameters.Add("@MaskDate" , SqlDbType.Date);
【问题讨论】:
-
函数不能被调用,只能在查询中使用。这与尝试调用例如
GETDATE()没有什么不同。 -
我们之前已经看到过这个功能 - 所以您似乎已经创建了一个新帐户来发布类似的问题。
-
您好,问题解决了吗?
-
嘿。项目要求发生了变化。谢谢。
标签: c# sql-server function asp.net-core scalar