0 0

不允许从数据类型 datetime 到 int 的隐式转换。请使用 CONVERT 函数来运行此查询。3

直接在数据库中执行存储过程没错误,但是,运行代码的时候,在cs.executeQuery();时候报异常。

部分相关代码:

 

	public List<PolicyVO> getPolicy(PolicyQueryVO paramVO, int start, int size) throws GenericException {
		/* 返回结果 */
		List<PolicyVO> resultList = null;
		ResultSet rs = null;
		CallableStatement cs = null;
		Connection _con = null;
		String sql = null;
		try {
			/*
			 * paramVO 不能为 null
			 */
			if (paramVO == null) {
				throw new Exception(" The param PolicyQueryVO is null.");
			}

			_con = getConnection();
			resultList = new ArrayList<PolicyVO>();

			try {

				sql = "{call sp_get_policy(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
				cs = createCallableStatement(_con, sql);

				if (paramVO.getApldateMin() != null) {
					java.sql.Timestamp time_from_date = java.sql.Timestamp.valueOf(df2.format(paramVO.getApldateMin()));
					cs.setTimestamp(3, time_from_date);
				} else {
					cs.setNull(3, Types.TIMESTAMP);
				}

				if (paramVO.getApldateMax() != null) {
					java.sql.Timestamp time_to_date = java.sql.Timestamp.valueOf(df2.format(paramVO.getApldateMax()));
					cs.setTimestamp(4, time_to_date);
				} else {
					cs.setNull(4, Types.TIMESTAMP);
				}
				if (paramVO.getBirthday() != null) {
					java.sql.Timestamp birthday = java.sql.Timestamp.valueOf(df2.format(paramVO.getBirthday()));
					cs.setTimestamp(7, birthday);
				} else {
					cs.setNull(7, Types.TIMESTAMP);
				}			
				if (paramVO.getEffectiveMinDate() != null) {
					java.sql.Timestamp time_from_date2 = java.sql.Timestamp.valueOf(df2.format(paramVO.getEffectiveMinDate()));
					cs.setTimestamp(14, time_from_date2);				
				} else {
					cs.setNull(14, Types.TIMESTAMP);
				}
				if (paramVO.getEffectiveMaxDate() != null) {
					java.sql.Timestamp time_to_date2 = java.sql.Timestamp.valueOf(df2.format(paramVO.getEffectiveMaxDate()));
					cs.setTimestamp(15, time_to_date2);
					
				} else {
					cs.setNull(15, Types.TIMESTAMP);
				}
				
				rs = cs.executeQuery();

				while (rs.next()) {
					PolicyVO tmpPolicyVO = new PolicyVOImpl();
					T1aplVO tmpT1aplVO = new T1aplVOImpl(); 
					T1plcbaseVO tmpT1plcbaseVO = new T1plcbaseVOImpl(); 
					T1prdVOEx tmpT1prdVO = new T1prdVOExImpl(); 
					T1isdVO tmpT1isdVO = new T1isdVOImpl(); 
					TprdVO tmpTprdVO = new TPrdVOImpl();	
					......
					tmpT1plcbaseVO.setRecvtodate(rs.getDate("baserecvtodate"));
					tmpT1plcbaseVO.setPrttime(rs.getDate("baseprttime"));
					tmpT1plcbaseVO.setArrivedate(rs.getDate("basearrivedate"));
					tmpT1plcbaseVO.setApldate(rs.getDate("baseapldate"));
					tmpT1plcbaseVO.setLapsedate(rs.getDate("baselapsedate"));
					tmpT1prdVO.setIssuedate(rs.getDate("prdissuedate"));
					tmpT1prdVO.setInsexprtdate(rs.getDate("prdinsexprtdate"));
					tmpT1prdVO.setRecvexprtdate(rs.getDate("prdrecvexprtdate"));
					tmpT1aplVO.setBirthday(rs.getDate("aplbirthday"));
					tmpT1isdVO.setBirthday(rs.getDate("isdbirthday"));
					.....
					resultList.add(tmpPolicyVO);
				}
			} catch (SQLException sqlEx) {
				sqlEx.printStackTrace();
				throw ExceptionUtil.handleException(sqlEx, this.getClass().getName());
			} finally {
				if (cs != null) {
					closeStatement(cs);
				}
				if (rs != null) {
					closeResultSet(rs);
				}
				if (!_con.isClosed()) {
					closeConnection(_con);
				}
			}
		} catch (Exception ex) {
			throw ExceptionUtil.handleException(ex, this.getClass().getName());
		} finally {

		}
		return resultList;
	}

 存储过程:

 

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[sp_get_policy] 
	-- Add the parameters for the stored procedure here

	@plcno nvarchar(22) = NULL,      
	@name nvarchar(60) = NULL,     
	@apldateMin datetime = NULL,     
	@apldateMax datetime = NULL,     
	@custno nvarchar(19) = NULL,     
	@certno nvarchar(30) = NULL,     
	@birthday datetime = NULL,       
	@mobile nvarchar(30) = NULL,      
	@status nvarchar(135) = NULL,      
	@t00salesno nvarchar(50) = NULL,  
    @product nvarchar(50) = NULL,    
	@downline nvarchar(5) = NULL,
	@allline nvarchar(5) = NULL,
    @start int           = 1,
    @pageSize int            = 0,
	@effectivedateMin datetime = NULL,     
	@effectivedateMax datetime = NULL    

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	DECLARE @sqlQuery nvarchar(4000)  
	DECLARE @sqlCount nvarchar(4000) 
	DECLARE @from nvarchar(1000)
	DECLARE @where nvarchar(1000)

	SET @plcno = rtrim(@plcno)
	SET @name = rtrim(@name)
	SET @custno = rtrim(@custno)
	SET @certno = rtrim(@certno)
	SET @mobile = rtrim(@mobile)
	SET @status = rtrim(@status)
	SET @t00salesno = rtrim(@t00salesno)
	SET @product = rtrim(@product)

	
	DECLARE @end int          

	SET NOCOUNT ON;

	SET @sqlQuery = ''
	SET @from = ''
	SET @where = ''

    -- Insert statements for procedure here
	SET @sqlQuery = @sqlQuery + N' t1plcbase.recvconvacct ppsnumber,t1plcbase.comagentno1 comagentno1, t1plcbase.comagentno2 comagentno2,t1plcbase.plcno baseplcno,t1plcbase.paperno basepaperno,t1plcbase.efftdate baseefftdate'
	SET @sqlQuery = @sqlQuery + ', t1plcbase.status basestatus,t1plcbase.recvway baserecvway,t1plcbase.recvtodate baserecvtodate'
	SET @sqlQuery = @sqlQuery + ', t1plcbase.prttime baseprttime, t1plcbase.arrivedate basearrivedate'
	SET @sqlQuery = @sqlQuery + ', t1plcbase.apldate baseapldate, t1plcbase.agentno baseagentno, t1plcbase.agentno2 baseagentno2'
	SET @sqlQuery = @sqlQuery + ', t1plcbase.isapl baseisapl, t1plcbase.currency basecurrency, t1plcbase.primprdcode baseprimprdcode'

	--SET @sqlQuery = @sqlQuery + ', T1recvacct.bank acctbank,T1recvacct.acctname acctacctname,T1recvacct.acct acctacct'

	SET @sqlQuery = @sqlQuery + ', T1prd.prdcode prdprdcode, T1prd.issuedate prdissuedate, T1prd.insamt prdinsamt, T1prd.stdprm prdstdprm, T1prd.recvmode prdrecvmode'
	SET @sqlQuery = @sqlQuery + ', T1prd.insexprtdate prdinsexprtdate, T1prd.recvterm prdrecvterm, T1prd.recvexprtdate as prdrecvexprtdate'
	SET @sqlQuery = @sqlQuery + ', T1prd.realprm prdrealprm, T1prd.prdserno prdprdserno'

	SET @sqlQuery = @sqlQuery + ', t_prd.name tprdname'

	SET @sqlQuery = @sqlQuery + ', T1apl.name aplname, T1apl.custno aplcustno, T1apl.sex aplsex, T1apl.certtype aplcerttype'
	SET @sqlQuery = @sqlQuery + ', T1apl.nationality aplnationality, T1apl.address apladdress, T1apl.address2 apladdress2'
	SET @sqlQuery = @sqlQuery + ', T1apl.address3 apladdress3, T1apl.mobile aplmobile, T1apl.housephone aplhousephone'
	SET @sqlQuery = @sqlQuery + ', T1apl.houseaddress aplhouseaddress, T1apl.houseaddress2 aplhouseaddress2, T1apl.houseaddress3 aplhouseaddress3'
	SET @sqlQuery = @sqlQuery + ', T1apl.edrno apledrno, T1apl.birthday aplbirthday, T1apl.certno aplcertno, T1apl.phoneno aplphoneno'
	SET @sqlQuery = @sqlQuery + ', T1apl.email aplemail'
	SET @sqlQuery = @sqlQuery + ', T1isd.name isdname, T1isd.custno isdcustno, T1isd.status isdstatus, T1isd.plcno isdplcno, T1isd.sex isdsex'
	SET @sqlQuery = @sqlQuery + ', T1isd.certtype isdcerttype, T1isd.nationality isdnationality, T1isd.contaddress isdcontaddress'
	SET @sqlQuery = @sqlQuery + ', T1isd.contaddress2 isdcontaddress2, T1isd.contaddress3 isdcontaddress3, T1isd.mobile isdmobile'
	SET @sqlQuery = @sqlQuery + ', T1isd.housephoneno isdhousephoneno, T1isd.houseaddress isdhouseaddress, T1isd.houseaddress2 isdhouseaddress2'
	SET @sqlQuery = @sqlQuery + ', T1isd.houseaddress3 isdhouseaddress3, T1isd.edrno isdedrno, T1isd.birthday isdbirthday, T1isd.certno isdcertno'
	SET @sqlQuery = @sqlQuery + ', T1isd.contphoneno isdcontphoneno, T1isd.email isdemail'
	
	SET @sqlQuery = @sqlQuery + ', t01_sales.t01name agentname, (select t01_sales.t01name from incramis..t01_sales where t01_sales.t00salesno = t1plcbase.agentno2) agentname2'

	SET @from = @from + N'   FROM incrLifeproNew.dbo.t1plcbase left join incrLifeproNew.dbo.T1prd' 
	SET @from = @from + '  on t1plcbase.plcno = T1prd.plcno AND t1plcbase.primprdcode = t1prd.prdcode'
	SET @from = @from + '  left join incrLifeproNew.dbo.t1apl on t1plcbase.plcno = T1apl.plcno'
	SET @from = @from + '  left join incrLifeproNew.dbo.T1isd on t1plcbase.plcno = T1isd.plcno'
	SET @from = @from + '  left join incrLifeproNew.dbo.t_prd on T1prd.prdcode = t_prd.prdcode'
	SET @from = @from + '  left join incramis.dbo.t01_sales on t1plcbase.agentno = t01_sales.t00salesno'

	-- Add by Terry Hung 20100715
	SET @where = @where + '   WHERE t1prd.prdcode = t1prd.primprdcode and t1prd.prdserno = 1 and  (t1prd.enddate is null or year(t1prd.enddate)= 1899) and t1prd.status <> ''4'''
	SET @where = @where + '   AND (t1apl.enddate is null or year(t1apl.enddate)= 1899) and t1apl.status = ''2'''
	--SET @where = @where + '   AND t1isd.enddate is null and (t1isd.edrno is null or t1isd.edrno = ''00'')'
	SET @where = @where + '   AND (t1isd.enddate is null or year(t1isd.enddate)= 1899) '

    IF (@product IS NOT NULL)
		SET @where = @where + ' AND t_prd.name like ''%' + @product + '%'''
	IF (@name IS NOT NULL)
		SET @where = @where + ' AND t1apl.name like ''%' + @name + '%'''
	IF (@plcno IS NOT NULL)
		SET @where = @where + ' AND t1plcbase.plcno like ''%' + @plcno + '%'''
	IF (@apldateMin IS NOT NULL)
		SET @where = @where + ' AND (DATEDIFF(DAY, t1plcbase.apldate, ''' + CONVERT(nvarchar(50), @apldatemin, 101) + ''') <= 0)'
	IF (@apldateMax IS NOT NULL)
		SET @where = @where + ' AND (DATEDIFF(DAY, t1plcbase.apldate, ''' + CONVERT(nvarchar(50), @apldatemax, 101) + ''') >= 0)'
	IF (@effectivedateMin IS NOT NULL)
		SET @where = @where + ' AND (DATEDIFF(DAY, t1plcbase.prttime, ''' + CONVERT(nvarchar(50), @effectivedateMin, 101) + ''') <= 0)'
	IF (@effectivedateMax IS NOT NULL)
		SET @where = @where + ' AND (DATEDIFF(DAY, t1plcbase.prttime, ''' + CONVERT(nvarchar(50), @effectivedateMax, 101) + ''') >= 0)'
	IF (@custno IS NOT NULL)
		SET @where = @where + ' AND t1apl.custno like ''%' + @custno + '%'''
	IF (@certno IS NOT NULL)
		SET @where = @where + ' AND t1apl.certno like ''%' + @certno + '%'''
	IF (@birthday IS NOT NULL)
		SET @where = @where + ' AND t1apl.birthday = ''' + CAST(@birthday AS nvarchar(50)) + ''''
	IF (@mobile IS NOT NULL)
		SET @where = @where + ' AND t1apl.mobile like ''%' + @mobile + '%'''
	IF (@status IS NOT NULL)
		SET @where = @where + ' AND t1plcbase.status in (''' + @status + ''')'
	IF (@t00salesno IS NOT NULL)
	BEGIN
		IF (@downline IS NOT NULL AND @allline IS NOT NULL)
			BEGIN
				SET @where = @where + ' AND (t1plcbase.agentno = ''' + @t00salesno + ''' OR t1plcbase.agentno2 = ''' + @t00salesno + ''' OR t1plcbase.comagentno1 = ''' + @t00salesno + ''' OR t1plcbase.comagentno2 = ''' + @t00salesno + ''''

				IF (@downline = 'false' AND @allline = 'false')
					BEGIN
						SET @where = @where + ')'
					END
				ELSE IF (@allline = 'true')
					BEGIN
						SET @where = @where + ' OR t1plcbase.agentno in (select t00salesno from incramis..t99_saleslevel where t01engage = ''' + @t00salesno +'''))'
					END
				ELSE
					BEGIN
						SET @where = @where + ' OR t01_sales.t01engage = ''' + @t00salesno + ''')'
					END
				
			END
		ELSE
			BEGIN
				SET @where = @where + ' AND (t1plcbase.agentno = ''' + @t00salesno + ''' OR t1plcbase.agentno2 = ''' + @t00salesno + ''' OR t1plcbase.comagentno1 = ''' + @t00salesno + ''' OR t1plcbase.comagentno2 = ''' + @t00salesno + ''') '
			END
		
	END
    
    if @start<=0 
        Set @start = 1

    SET @end = @start + @pageSize - 1
    
    SET @sqlQuery = N'Select * FROM (select ROW_NUMBER() Over(order by t1plcbase.plcno) as rowId,' + @sqlQuery + @from + @Where
	SET @sqlQuery = @sqlQuery + ') as t where rowId between ' + Convert(varchar(50),@start) + ' and ' +  Convert(varchar(50),@end)
    
	EXEC(@sqlQuery)
END
DECLARE	@return_value int       --直接在数据库中这样执行是没有报错的。

EXEC	@return_value = [dbo].[sp_get_policy]
		@apldateMax = N'2011-4-20',
		@birthday = N'2011-4-20',
		@effectivedateMin = N'2011-4-20',
		@effectivedateMax = N'2011-4-20'

SELECT	'Return Value' = @return_value

GO
DAO 
2011年4月20日 10:34
目前还没有答案

相关推荐

    SQL中convert和cast的区别

    * Convert 函数支持更多的数据类型转换,例如将 datetime 类型转换为 varchar 类型。 * Cast 函数支持的数据类型转换较少,但具有更好的跨数据库兼容性。 实际应用 在实际应用中,我们可以根据实际情况选择合适的...

    TypeByte@2019_C#_C++_C数据类型转换时间戳转换_

    例如,从int转换到double可以使用隐式转换,而从object转换到具体类型则需要显式转换。在处理时间戳时,C#提供了DateTime结构,可以方便地与Unix时间戳(从1970年1月1日00:00:00至今的秒数)进行相互转换,通过...

    mysql数据类型转换

    MySQL提供了多种方式来实现数据类型的转换,主要包括`CAST`函数、`CONVERT`函数以及直接使用算术操作等方法。下面我们将详细介绍这些转换方法及其使用场景。 #### 三、数字类型转换为字符串类型 1. **使用`CONCAT`...

    文档-数据库函数-数据类型

    此外,SQL Server还提供了一些内置函数来操作这些数据类型,比如转换数据类型(CONVERT、CAST)、获取当前日期(GETDATE)、处理字符串(LEFT、RIGHT、SUBSTRING)、以及数学运算(ROUND、FLOOR、CEILING)等。...

    数据库技术sql数据类型转换

    SQL Server 提供了两种常用的数据类型转换方式:`CAST()` 和 `CONVERT()` 函数。这两种方法各有特点,能够帮助用户灵活地处理各种类型的数据。 #### 一、`CAST()` 函数 `CAST()` 是 SQL-92 标准中定义的函数,用于...

    SQL Server中T-SQL 数据类型转换详解

    -- 错误:显式转换不允许从INT到DATE SELECT TRY_CONVERT(DATE, '20220101', 112) AS Result; -- 成功:2022-01-01 ``` 请注意,即使有容错转换函数,也不能违反SQL Server中预定义的非法类型转换,如尝试将整数...

    c#数据类型转换,BYTE,float,double,char类型间的转换方法.docx

    可以使用`Convert.ToInt32()`或`int.Parse()`函数将字符转换为其Unicode编码,也可以使用`char.ToString()`或`Convert.ToChar()`将整数转换回字符。 **数值字符串与数值之间的转换** C#提供了`int.Parse()`,`int....

    C#中DateTime.Now函数详解

    - **根据星期几进行日期计算**:例如,通过 `DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString()` 可以得到本周周一的日期,而 `DateTime.Now.AddDays...

    SqlServer,Oracle数据类型,函数,导入导出对照

    标题和描述均聚焦于SQL Server与Oracle数据库管理系统中数据类型、函数以及导入导出操作的对比,这为我们提供了一个深入探讨这两个广泛使用的数据库平台之间差异的机会。以下是对这些知识点的详细解析: ### 数据...

    sql中常用函数[定义].pdf

    5. CONVERT函数:这个函数用于将一种数据类型转换为另一种,特别适用于日期格式的转换。例如,`CONVERT(VARCHAR, GETDATE(), 101)`将返回当前日期,格式为mm/dd/yyyy。 在SQL Server中,日期格式化可以使用CONVERT...

    C#各种数据类型转换

    ### C#中的各种数据类型转换方法 在C#编程中,数据类型的转换是十分常见的操作。无论是基本数据类型的转换还是复杂对象之间的转换,都非常重要。本文将详细介绍C#中涉及的一些常见数据类型转换方法,包括但不限于...

    asp.netC#函数大全

    表达式:FormatDateTime(date, format) 允许数据类型:date 是任何有效的日期或时间,format 是一个指定日期/时间格式的字符串。 实例:(#9/9/00#, "dddd, mmmm d, yyyy")%&gt; 返回结果:星期六,九月 9,2000 在...

    sql使用cast进行数据类型转换示例

    在SQL中,数据类型转换是将一个数据值从一种数据类型转换为另一种数据类型的过程,这对于处理各种数据库操作和查询时的数据一致性至关重要。`CAST`函数是SQL中用于执行这种转换的标准方法,它允许我们将一个表达式从...

    c#的数据转换.docx

    这些转换可以通过显式类型转换(如`(int)value`)或隐式类型转换(如果转换不会导致数据丢失)完成。需要注意的是,不同大小的数值类型之间转换可能涉及数据溢出,因此需要谨慎操作。 字符编码方面,C#中的`char`...

    sql数据长度及类型

    - 在SQL中,可以使用CAST或CONVERT函数将一种数据类型转换为另一种,但需要注意类型间的兼容性和可能的精度损失。 5. 数据库管理系统差异: - 不同的SQL数据库系统(如MySQL、PostgreSQL、SQL Server)对数据类型...

    sqlserver-oracle 数据类型对照

    本文将详细比较SQL Server和Oracle数据库之间的数据类型对应以及常用函数的转换。 首先,我们来看SQL Server和Oracle的数据类型对照: 1. **数值类型**: - `bigint`在SQL Server中对应Oracle的`NUMBER(19)`,...

    取代游标的方案:使用min()函数或max()函数;用表函数;使用临时表

    在数据库管理领域,游标(Cursor)是一种用于处理查询结果集的强大工具,它允许开发者一行行地读取数据,执行复杂的操作,如条件判断、循环等。然而,游标也因其性能开销大、资源占用高而常被诟病。在SQL编程中,...

    C# 常用日期时间函数

    DateTime weekStart = DateTime.Now.AddDays(-Convert.ToInt16(DateTime.Now.DayOfWeek)); DateTime weekEnd = weekStart.AddDays(6); ``` - 获取上周和下周的日期,可以使用类似方法,通过加上或减去7天来获取...

    微软.NET平台中类型使用的基本原理

    然而,不是所有类型间的转换都是安全的,比如尝试将一个`Jeff`对象强制转换为`String`,编译器会报错,因为这种转换没有内置的支持,需要使用显式转换(`as`关键字或`Convert`类的方法)。 在.NET中,面向对象特性...

    Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    Convert函数在SQL Server中提供了更广泛的灵活性,特别是在处理日期和时间值以及数字之间的转换。它的语法结构为`CONVERT ( data_type [ ( length ) ] , expression [ , style ] )`。`style`参数允许指定特定的日期...

Global site tag (gtag.js) - Google Analytics