我的函数是
CREATE FUNCTION dbo.getEmployeeDetail(@timeBeg varchar,@timeEnd varchar)
RETURNS @EmployeeDetail TABLE SQL验证也正确,但是当调用时就出问题了:
SELECT *
FROM getEmployeeDetail('2006-10-1', '2006-10-31') getEmployeeDetail
说从字符串转换为datetime时发生语法错误...
这是怎么回事

解决方案 »

  1.   

    调用时不要直接拼SQL语句,使用参数传递
    SELECT *
    FROM getEmployeeDetail(@timeBeg,@timeEnd) getEmployeeDetailSqlParameter paramBegin = new SqlParameter ( "@timeBeg", SqlDbType.DateTime );
    paramBegin.Value = "2006-10-1";
    SqlParameter paramEnd = new SqlParameter ( "@timeEnd", SqlDbType.DateTime );
    paramBegin.Value = "2006-10-31";
      

  2.   

    上述方法要求修改函数的参数,如果不修改参数,建议在函数中对传入的参数进行强制转换。转换为DateTime
      

  3.   

    按照LS说的改了
    string sql = "SELECT * FROM getEmployeeDetail(@timeBeg,@timeEnd) getEmployeeDetail";
                OleDbCommand cmd = new OleDbCommand(sql, con);
                cmd.Parameters.Add(paramBegin);
                cmd.Parameters.Add(paramEnd);
                OleDbDataReader reader = cmd.ExecuteReader();//这句抛出了必须声明变量的异常..这是怎么回事啊