sqlserver里面怎么执行mysql的存储过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver里面怎么执行mysql的存储过程相关的知识,希望对你有一定的参考价值。
现在的语句是
select * FROM OPENQUERY(pidb,'call api_pidb_real(20100)')
结果是:
服务器: 消息 7357,级别 16,状态 2,行 1
未能处理对象 'call api_pidb_real(20100)'。OLE DB 提供程序 'MSDASQL' 指出该对象中没有任何列。
OLE DB 错误跟踪[Non-interface error: OLE DB provider unable to process object, since the object has no columnsProviderName='MSDASQL', Query=call api_pidb_real(20100)']。
请问 该如何改 能执行成功
OPENQUERY(pidb,'call api_pidb_real(20100)')
函数和函数体内部调用别的函数或者存储过程。都需要进一步确认并且在数据库中创建和执行才能确保你现在这句话能通 参考技术A exec call api_pidb_real(20100)追问
你是在玩吗?
SQL Server 里需要定时执行某个存储过程,存储过程怎么写?
SQL Server 里需要定时执行某个存储过程,存储过程怎么写?
数据库:test
表名:biao
id money1 time money2 money3 money4
1 600 2010-1-10 100
2 1200 2010-1-12 200
存储过程是:if DateDiff("d",time,now)<=30 and DateDiff("d",time,now)>0
money3 = money1*0.3
if DateDiff("d",time,now)<=60 and DateDiff("d",time,now)>30
money3 = money1*0.6
if DateDiff("d",time,now)<=365 and DateDiff("d",time,now)>60
money3 = money1*0.9
if DateDiff("d",time,now)>365
money3 = money1
if DateDiff("d",time,now)<=30 and DateDiff("d",time,now)>0
money4 = money1*0.3-money2
if DateDiff("d",time,now)<=60 and DateDiff("d",time,now)>30
money4 = money1*0.6-money2
if DateDiff("d",time,now)<=365 and DateDiff("d",time,now)>60
money4 = money1*0.9-money2
if DateDiff("d",time,now)>365
money4 = money1-money2
时间是每天的01:00执行一次
存储过程的SQL怎么写???
procedure
pro_test
as
declare
@time
datetime,
@id
int,
@difftime
int
declare
cursor_time
cursor
for
select
id,time
from
test_table
-----(your
table_name)
open
cursor_time
fetch
cursor_time
into
@id,@time
begin
while
@@fetch_status=0
begin
select
@difftime=DateDiff(dd,@time,getdate())
if
@difftime>0
and
@difftime<=30
begin
update
test_table
set
money3
=
money1*0.3,money4
=
(money1*0.3-money2)
where
id=@id
end
if
@difftime>30
and
@difftime<=60
begin
update
test_table
set
money3
=
money1*0.6,money4
=
(money1*0.6-money2)
where
id=@id
end
if
@difftime>60
and
@difftime<=365
begin
update
test_table
set
money3
=
money1*0.9,
money4
=
(money1*0.9-money2)
where
id=@id
end
if
@difftime>365
begin
update
test_table
set
money3
=
money1
,money4
=
(money1-money2)
where
id=@id
end
end
end
把存储过程里的表明改成你的table
创建好这个存储过程后,然后在企业管理器里,展开“管理”-“sql
server
代理”-“作业”
新建一个作业。
在“步骤”里选择你要执行的库,然后
在代码栏写上‘exec
pro_test’,“调度”里设置下时间,就可以了。
不明白的地方hi我。 参考技术A create procedure pro_test
as
declare @time datetime,
@id int,
@difftime int
declare cursor_time cursor for select id,time from test_table -----(your table_name)
open cursor_time
fetch cursor_time into @id,@time
begin
while @@fetch_status=0
begin
select @difftime=DateDiff(dd,@time,getdate())
if @difftime>0 and @difftime<=30 begin
update test_table set money3 = money1*0.3,money4 = (money1*0.3-money2) where id=@id
end
if @difftime>30 and @difftime<=60 begin
update test_table set money3 = money1*0.6,money4 = (money1*0.6-money2) where id=@id
end
if @difftime>60 and @difftime<=365 begin
update test_table set money3 = money1*0.9, money4 = (money1*0.9-money2) where id=@id
end
if @difftime>365 begin
update test_table set money3 = money1 ,money4 = (money1-money2) where id=@id
end
end
end
把存储过程里的表明改成你的table
创建好这个存储过程后,然后在企业管理器里,展开“管理”-“sql server 代理”-“作业” 新建一个作业。
在“步骤”里选择你要执行的库,然后 在代码栏写上‘exec pro_test’,“调度”里设置下时间,就可以了。
不明白的地方hi我。 参考技术B 1、管理->SQL Server代理->作业(按鼠标右键)->新建作业->
2、新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->
分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->描述[填写本次工作详细描述内容];[ 创建作业分类的步骤:SQL Server代理->作业->右键选所有任务->添加、修改、删除 ]
3、新建作业属性(步骤)->新建->步骤名[自定义第一步骤名称]->类型[Transact-SQL(TSQL)脚本]->数据库[要操作的数据库]->命令[ 如果是简单的SQL直接写进去即可,也可用打开按钮输入一个已写好的*.sql文件如果要执行存储过程,填exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN]]->确定(如果有多个步骤,可以再次调用下面的新建按钮;也可以对已有的多个步骤插入、编辑、删除);
4、建作业属性(调度)->新建调度->名称[自定义调度名称]->启用的方框内是勾号->调度->反复出现->更改[调度时间表]->确定(如果只要保存此作业,不要定时做可以把启用的方框内是勾号去掉);
5、建作业属性(通知)->用默认的通知方法就好[当作业失败时,写入Windows应用程序系统日志] ->确定。 参考技术C 在sql管理器中,打开sqlserver代理,选择作业,--》新增作业。
根据步骤,输入执行脚本,设置执行间隔时间等,启用就可以了 参考技术D 可以用windows自带的任务执行计划,在附件-系统工具中。
以上是关于sqlserver里面怎么执行mysql的存储过程的主要内容,如果未能解决你的问题,请参考以下文章