--动态创建存储过程的示例:
create proc p_test()
as
if object_id('要动态创建的存储过程名') is not null
drop proc 要动态创建的存储过程名
exec('create proc 要动态创建的存储过程名
as
....
')
go
create proc p_test()
as
if object_id('要动态创建的存储过程名') is not null
drop proc 要动态创建的存储过程名
exec('create proc 要动态创建的存储过程名
as
....
')
go
解决方案 »
- sql语句如何获取.bak文件中的信息
- 这个用触发器 该怎么写啊 高手帮忙写写啊
- 【【100分】】sql2005 到 sql2000 脚本报 '(' 附近有语法错误。
- 请教SQL语句写法,BCP参数问题,急!马上结!!!!!
- 如何实现一个数据库的数据发生变化时,更新另一个数据库的数据,也就是说他们保持同步一致
- SQL的视图中取日期用作表名问题
- sql 取日期问题
- ALTER TABLE test alter column id int IDENTITY怎么有错误
- 判断数据库中是否存在某个表的通用方法是什么?
- sql server 2008 表有3个主键会导致数据出入失败吗??
- 哥哥们,MM数据库不好,有事请教~~不知道实现如下功能用到触发器否???
- sql server 7.0出现wnetremovecachedpassword 错误
可以用exec:
declare @sql nvarchar(1000)
set @sql=N'@a='+'345+345*4/1'
exec sp_executesql @sql,N'@a int output',@a output
select @a 结果
2。作业调度中如何保证调用的是创建的那些存储过程的全部,也就是说作业调度的对象也是动态的?你可以只调度一个对象,而这个对象根据不同情况动态调用其他对象。
http://expert.csdn.net/Expert/topic/2323/2323708.xml?temp=.2692224
我用sql server数据库,库中有如下两表。
表t1保存不同类型人员在消费时的折扣计算公式及奖励积分计算公式,如下:
类型 折扣价 积分
一般会员 本次消费额* 0.95 积分+round(本次消费额/1000)
白银会员 本次消费额* 0.9 积分+round(本次消费额/1000)
黄金会员 本次消费额* 0.85 积分+round(本次消费额/1000)
钻石会员 本次消费额* 0.8 积分+round(本次消费额/1000)表t2中保存人员的消费情况,并要根据t1中各对应字段公式计算其结果,如下:
会员编号 类型 本次消费额 折扣价 积分
002 白银会员 1520.00 0 0
005 黄金会员 3300.00 0 0
007 一般会员 350.00 0 0
034 钻石会员 520.00 0 0
002 白银会员 780.00 0 0如上两表,在sql server查询分析器里我想用t1表中的公式直接用update命令计算出t2表中对应字段的值。命令如下:update t2 set 折扣价=t1.折扣价,积分=t1.积分 from t1,t2 where t1.类型=t2.类型可是执行时却提示说数据类型转换出错,因为t1表中的折扣价字段和积分字段为char型,保存的计算公式,可在t2表中的折扣份和积分字段却为数值型,所以出错。本人要如何才能实现如上算法。请高人们帮我看看我应如何做!查了一夜sql书也找不到办法,只能求教各位了。
*******************
create table #t1(类型 varchar(8),折扣价 varchar(100),积分 varchar(100))
insert #t1 select
'一般会员','本次消费额*0.95','积分+round(本次消费额/1000,0)'
Union all select
'白银会员','本次消费额*0.9','积分+round(本次消费额/1000,0)'
Union all select
'黄金会员','本次消费额*0.85','积分+round(本次消费额/1000,0)'
Union all select
'钻石会员','本次消费额*0.8','积分+round(本次消费额/1000,0)'create table #t2(会员编号 char(3),类型 varchar(8),本次消费额 numeric(10,2),折扣价 numeric(10,2),积分 int)
insert #t2 select
'002','白银会员',1520.00, 0, 0
union all select
'005','黄金会员',3300.00, 0, 0
union all select
'007','一般会员',350.00, 0 , 0
union all select
'034','钻石会员',520.00, 0 , 0
union all select
'002','白银会员',780.00, 0 , 0
declare @a char(100),@b varchar(100),@c varchar(100)declare cur cursor for select * from #t1
open curfetch next from cur into @a,@b,@cwhile @@fetch_status = 0
begin
exec('update #t2 set 折扣价='+@b+',积分='+@c+' where 类型='''+@a+'''')
fetch next from cur into @a,@b,@c
end
close cur
deallocate curSelect * from #t2
go
drop table #t1,#t2
exec p_createjob @jobname='mm',@sql='select * from syscolumns',@freqtype='month'--每周执行的作业
exec p_createjob @jobname='ww',@sql='select * from syscolumns',@freqtype='week'--每日执行的作业
exec p_createjob @jobname='a',@sql='select * from syscolumns'--每日执行的作业,每天隔4小时重复的作业
exec p_createjob @jobname='b',@sql='select * from syscolumns',@fsinterval=4--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_createjob]
GOcreate proc p_createjob
@jobname nvarchar(100), --作业名称
@sql varchar(8000), --要执行的命令
@dbname sysname='', --默认为当前的数据库名
@freqtype varchar(6)='day', --时间周期,month 月,week 周,day 日
@fsinterval int=1, --相对于每日的重复次数
@time int=170000, --开始执行时间,对于重复执行的作业,将从0点到23:59分
@deletejob bit=1 --如果有同名的作业,则删除它
as
if isnull(@dbname,'')='' set @dbname=db_name()--如果同名的作业已经存在,则删除它
if @deletejob=1 and exists(SELECT 1 from msdb..sysjobs where name=@jobname)
EXECUTE msdb.dbo.sp_delete_job @job_name=@jobname --创建作业
exec msdb..sp_add_job @job_name=@jobname--创建作业步骤
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '数据处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔--创建调度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 endEXEC msdb..sp_add_jobschedule @job_name=@jobname,
@name = '时间安排',
@freq_type=@ftype , --每天,8 每周,16 每月
@freq_interval=1, --重复执行次数
@freq_subday_type=@fstype, --是否重复执行
@freq_subday_interval=@fsinterval, --重复周期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分执行go