用exec sp_executesql @sql,N'@b int output',@b ou...
2013-07-10 00:00
344 查看
摘要: 用exec sp_executesql @sql,N'@b int output',@b output 取出查询到@sql的数
USE [wwdthdb00]
//这里是声明全局变量
//这里是声明局部变量
---//以上是大于11或者等于11F_CM的
//以下是sql sever的常规语句与使用exec sp_executesql没什么关系
begin
USE [wwdthdb00]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[wwdadm_lottery]
(
//这里是声明全局变量
@F_member_id varchar(12)
)
AS
begin
//这里是声明局部变量
declare @sql nvarchar(1000),@sq nvarchar(1000),@F_cm1 int,@F_cm2 int,@b nvarchar(100),@F_field_set_pm int,@F_pm3 int,@Sui_ji_count int,@F_cm int,@a nvarchar(100),@F_debt2 money,@F_month_cm_id int,@F_field_set_id int
begin transaction
set @F_cm=(SELECT F_cm FROM T_member_information where F_cm>=1 and F_member_id=@F_member_id)
set @F_month_cm_id=(SELECT F_month_cm_id FROM T_month_cm where F_flag='0')
set @F_cm1=(@F_cm/10)
set @F_cm2=(@F_cm%10)
set @Sui_ji_count=cast(ceiling(rand()*5)as int) //这里是使用随机函数并将其转为int型
set @F_field_set_pm =(select F_field_set_pm from T_lottery_field_set where F_lottery_id=@Sui_ji_count)--抽到的对应F_field_set_pm
set @sql='set @b=(select F_'+cast(@Sui_ji_count as varchar(10))+' from T_lottery_details where F_lottery_id='+cast(@F_cm2 as varchar(100))+')'--小于10时的字段值
exec sp_executesql @sql ,N'@b int output',@b output //用exec sp_executesql取出查询到@sql语句的数存到变量@b
set @sq='set @a=(select F_'+cast(@Sui_ji_count as varchar(10))+' from T_lottery_details where F_lottery_id='+cast(10 as varchar(100))+')'--等于10或者大于10查找到的字段值
exec sp_executesql @sq ,N'@a int output',@a output //用exec sp_executesql取出查询到的数存到变量@a
set @F_debt2=(select F_debt from [T_member_information] where F_member_id=@F_member_id)
if @F_cm>10
begin
set @F_pm3=@b*@F_field_set_pm+@F_cm1*@a*@F_field_set_pm //使用变量@a和@b
---//以上是大于11或者等于11F_CM的
end
else
//以下是sql sever的常规语句与使用exec sp_executesql没什么关系
begin
if @F_cm=10 --大于等于10时
set @F_pm3=@F_cm1*@a*@F_field_set_pm
else --小于10
set @F_pm3=@b*@F_field_set_pm
end
if(@F_debt2<0)---欠款
begin
if(@F_pm3>=(-@F_debt2))
UPDATE [T_member_information] set F_cm=F_cm-@F_cm1*10-@F_cm2,F_pm=(F_pm+@F_pm3+@F_debt2),F_debt=0 where F_member_id=@F_member_id
else
UPDATE [T_member_information] set F_cm=F_cm-@F_cm1*10-@F_cm2,F_debt=(F_debt+@F_pm3) where F_member_id=@F_member_id
end
else
begin
UPDATE [T_member_information] set F_cm=F_cm-@F_cm1*10-@F_cm2,F_pm=F_pm+@F_pm3 where F_member_id=@F_member_id
end
INSERT INTO T_member_lottery([F_month_cm_id],[F_member_id],[F_field_set_id],[F_member_lottery_cm],F_flag) VALUES(@F_month_cm_id, @F_member_id, @F_field_set_id, @F_field_set_pm,'1')
if @@error=0
begin
commit
--return 0
end
else
begin
rollback
--return 1
end
end
相关文章推荐
- 用exec sp_executesql @sql,N'@b int output',@b output 取出查询到@sql的数
- sql server通过exec sp_executesql @pagecountsql,N'@RecodeNum int output',@RecodeNum output 传参执行自定义@sql
- SqlCommand.ExecuteReader 无法获取 sqlserver 存储过程 OUTPUT 返回的参数值问题
- mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1'
- could not execute statement; SQL [n/a]; constra 4000 int [null]级联删除异常
- 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )
- 最新一道面試題目,input: int[1,1,2,2,2,3,3,3],output [3,2,1],要求按照數字出現的次數從多到少排列元素。
- 调用SQLBindCol参数TargetType=SQL_C_LONG,TargetValuePtr为int/long
- java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
- Sqlhelper.ExecuteReader关闭connection的方式
- 执行动态SQL,exec和exec sp_executesql
- Could not execute JDBC batch update : java.sql.BatchUpdateException: ORA-00926: 缺失 VALUES 关键字
- rs.open sql,conn 与conn.execute(sql)的区别
- PL/SQL中存储过程int和out的用法
- Caused by: java.sql.SQLException: Invalid value for getInt()
- JDBC连接MYSQL数据库/executeQuery(String sql),execute...
- sql---在查询语句中将float转换为int
- int、bigint、smallint 和 tinyint (Transact-SQL)
- MySql关于java.sql.SQLException: Unknown system variable 'tx_read_only'
- PL/SQL 中 dbms_output.put_line 输出字符长度限制的问题