㈠ java语言,jdbcTemplate.queryForMap查询,如何传入两个参数到sql中
1、使用Map<String,Object> jdbcTemplate.queryForMap查询,其返回结果必须有且只有1个map值,否则会抛出异常。若抛出异常,则肯定不会得到返回值。
例如“控制台提示错误Incorrectresultsize:expected1,actual 0”。
问题原因参考(1)字符串的Jdbctemplate查询::结果大小不正确:预期1,实际0网页链接
问题原因参考(2)JdbcTemplate queryForObject结果大小不正确:预期为1,实际为0网页链接
2、推荐使用jdbcTemplate.query或List<Map<String,Object>>jdbcTemplate.queryForList查询。
/**
*
*@Title:querySpxxMap_dbBySsflbm
*@Description:TODO(根据税收分类编码、企业id,联查商品信息表、税收分类编码表的,商品id+商品名称+规格型号+计量单位+税率+税收分类编码)
*@paramssflbm
*@paramqyid
*@return设定文件
*@returnMap<String,Object>返回类型
*@throws
*/
publicList<Map<String,Object>>querySpxxMap_dbBySsflbm(Stringssflbm,Stringqyid){
Stringsql="selectspxx.id,spxx.spmc,spxx.ggxh,spxx.jldw,ss.slv,ss.hbbmssflbm"
+"fromt_jc_ssflbmss"
+"leftjoint_qy_spxxspxxonspxx.ssflbm=ss.hbbm"
+"wheress.hbbm=?andspxx.qyid=?";
//queryForList参数写法1
List<Object>conditionList=newArrayList<Object>();
conditionList.add(ssflbm);
conditionList.add(qyid);
List<Map<String,Object>>list1=jdbcTemplate.queryForList(sql,conditionList.toArray());
//queryForList参数写法2
List<Map<String,Object>>list2=jdbcTemplate.queryForList(sql,newObject[]{ssflbm,qyid});
returnlist1;
}
㈡ sql语句双参数传递
看type表中的字段类型:
如果d_type(或d_order)是字符型(varchar)或日期型(datetime)就要加'',及...d_type='"&request.Form("d_type") &"' and....
如果d_type(或d_order)是数值型(int,float,numeric,decimal)就按你原来的写不需要加''
㈢ sql 存储过程 传入两组数组参数
declare@nnvarchar(500)
declare@mnvarchar(500)
set@n='1,2,3,4,5'
set@m='a,b,c,d,e'
createtable#tb(nVARCHAR(500),mVARCHAR(500))
while(1=1)
begin
if(Charindex(',',@n)=0andCharindex(',',@m)=0)
begin
insertinto#tbvalues(@n,@m)
break
end
insertinto#tbvalues(Substring(@n,1,Charindex(',',@n)-1),Substring(@m,1,Charindex(',',@m)-1))
set@n=Right(@n,Len(@n)-Charindex(',',@n))
set@m=Right(@m,Len(@m)-Charindex(',',@m))
end
select*from#tb
droptable#tb
ps:要做好校验!
㈣ 怎样用PL/SQL编写带两个参数的函数
既然叫PL/SQL 那就oracle的吧:
CREATE OR REPLACE PROCEDURE orderno_check(
orderno_in VARCHAR(100)--字段不清楚什么类型的,你自己改吧
)
AS
DECLARE
ostatus_tmp CHAR(1)--字段不清楚什么类型的,你自己改吧
BEGIN
ostatus_tmp:=' ';
SELECT ostatus INTO ostatus_tmp FROM 表名 WHERE orderno=orderno_in;
IF ostatus_tmp='p' THEN
DELETE FROM 表名 WHERE orderno=orderno_in;
ELSE
DBMS_OUTPUT.put_line('该订单已确认,无法删除');
END IF;
END;
/
说明,要想看到输出语句一定要打开控制台输出
SET serveroutput ON;
---
以上,希望对你有所帮助。
㈤ C#中带2个参数的SqlCommand对象的使用方法
这是和SQL数据库相关的一个方法,用来执行SQL语句的,有两个 参数,第一个是要执行的SQL命令,字符串类型的,第二个是SQL连接,是SqlConnection类型的,你最后一个cmd.Parameters.Add();是添加参数用的,你执行的内容应该是存储过程.我们数据库内容不同,举的例子你运行不成功的,可以把大致的用法告诉你,你自己改一下:
SqlConnection conn=new SqlConnection(@"....你自己机子和数据库的连接字符串");比如: SqlConnection conn = new SqlConnection(@"Data Source=yh\sqlexpress;Initial Catalog=CashFlow;Integrated Security=True");
string SqlStr="你要执行的命令";
SqlCommand cmd=new SqlCommand(SqlStr,conn);
cmd.CommandType=CommandType.StoredProcere;
SqlParameter p=new SqlParameter(@参数的名称,SqlType.参数的类型,长度);
比如: SqlParameter line_Name = new SqlParameter("@line", SqlDbType.NVarChar, 10);
p.Direction=ParameterDirection.Input;
p.value="xxx";
cmd.Parameters.Add(p);
conn.Open();
cmd.ExceuteNonQuery();
conn.Close();
这就是一次完整的数据库执行过程,打得很辛苦,给分吧,不明白的可以问我.
㈥ SQL取两个值计算然后定义其属于的范围,应该怎么写存储过程语句
call sp_add();
是不是你定义的过程有问题吧,并没有指出返回结果来
像我这样是可以的:
CREATE PROCEDURE sp_add(a int, b int,out c int)
begin
set c=a+ b;
end;
调用过程:
call sp_add (1,2,@a);
select @a;
㈦ SQLSERVER里的动态sql语句最多2个输出参数吗
--买课人数:当日买课人数,本周买课人数,当月买课人数,当季买课人数
ALTER PROC [dbo].[Report_CustomerClassCourseOrder_BuyClass_SP]
@FreeData DATE ,
@FranchiseeID INT ,
@DayBuyClass INTEGER OUTPUT ,
@SumDayBuyClass INTEGER OUTPUT ,
@WeekBuyClass INTEGER OUTPUT ,
@SumWeekBuyClass INTEGER OUTPUT ,
@AprilBuyClass INTEGER OUTPUT ,
@SumAprilBuyClass INTEGER OUTPUT ,
@QuarterBuyClass INTEGER OUTPUT ,
@SumQuarterBuyClass INTEGER OUTPUT,
@YesterdayBuyClass INTEGER OUTPUT, ---昨天
@SumYesterdayBuyClass INTEGER OUTPUT, ---昨天
@LastweekBuyClass INTEGER OUTPUT,--Last week上周
@SumLastweekBuyClass INTEGER OUTPUT,--Last week上周
@LastmonthBuyClass INTEGER OUTPUT,--上月
@SumLastmonthBuyClass INTEGER OUTPUT,--上月
@LastquarterBuyClass INTEGER OUTPUT,--上季度
@SumLastquarterBuyClass INTEGER OUTPUT--上季度
AS
你看这有几个了
㈧ 怎样用PL/SQL编写带两个参数的函数
既然叫PL/SQL
那就oracle的吧:
CREATE
OR
REPLACE
PROCEDURE
orderno_check(
orderno_in
VARCHAR(100)--字段不清楚什么类型的,你自己改吧
)
AS
DECLARE
ostatus_tmp
CHAR(1)--字段不清楚什么类型的,你自己改吧
BEGIN
ostatus_tmp:='
';
SELECT
ostatus
INTO
ostatus_tmp
FROM
表名
WHERE
orderno=orderno_in;
IF
ostatus_tmp='p'
THEN
DELETE
FROM
表名
WHERE
orderno=orderno_in;
ELSE
DBMS_OUTPUT.put_line('该订单已确认,无法删除');
END
IF;
END;
/
说明,要想看到输出语句一定要打开控制台输出
SET
serveroutput
ON;
---
以上,希望对你有所帮助。
㈨ SQL中存储过程如果有两个参数,如何接收这两个返回值
存储过程的参数有三类:
输入参数、输出参数和输入输出参数,具体是什么参数,看看你的存贮过程试怎么定义
输入参数是不会有返回的,只有后面两个才会有返回
㈩ 在sql存储过程中有两个参数
declare @datestart varchar(6), --传的参数
@dateend varchar(6), -- 传的参数
@result nvarchar(max),
@monthNumber int,
@result1 nvarchar(8)
set @datestart='201109'
set @dateend='201212'
set @result=@datestart+' '
select @monthNumber=DateDiff(m,convert(datetime,@datestart+'01'),convert(datetime,@dateend+'01'))
select @monthnumber
declare @i int
set @i=1
while @i<=@monthnumber
begin
select @result1=convert(varchar(6),dateadd(m,@i,convert(datetime,@datestart+'01')),112)
set @i=@i+1
set @result=@result+@result1+' '
end
select @result
上边的可以实现你所要的功能的,,顶二楼,,参考二楼写的,,如果要改为存储过程,,你只需把上边的代码改改就行的,,对于起始时间和结束时间的判断,,你可以再后台代码中实现,,也可以在存储过程中实现,,只需要使用if else就行了