用ADO执行sql脚本文件中的存储过程有要求?

yangqi613 2012-06-10 12:03:49

我用下面的写法,先判断,如果不存在就写入存储过程,在ADO中执行直接报错,

提示:在关键字 'PROCEDURE' 附近有语法错误。存储过程是没有问题的,也没有go

if not exists (select * from sysobjects where id = object_id(N'[Cx_showDk]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

begin

CREATE PROCEDURE Cx_showDk
……
end
...全文
1759 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaikai_kk 2012-06-14
  • 打赏
  • 举报
回复
create procedure
create view
create function
...等等,要求是在第1个查询(即放在最前面)

可以用sp_executesql,如:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[xx]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'create procedure [dbo].[xx]
as
print ''A'''
END

火龙岛主 2012-06-14
  • 打赏
  • 举报
回复
CREATE PROCEDURE Cx_showDk不是delphi语法,当然报错了。
「已注销」 2012-06-11
  • 打赏
  • 举报
回复
这不是ADO的限制,是t-sql的要求,
'CREATE PROCEDURE' 必须是批查询中的第一条语句。
7年 2012-06-11
  • 打赏
  • 举报
回复
楼主,这样的错误最好就是把你的SQL语句打印出来,或者设个断点,把SQL语句复制到SQL里,看看到底哪错了
fa_ge 2012-06-11
  • 打赏
  • 举报
回复

我用下面的写法,先判断,如果不存在就写入存储过程,在ADO中执行直接报错,

提示:在关键字 'PROCEDURE' 附近有语法错误。存储过程是没有问题的,也没有go

if not exists (select * from sysobjects where id = object_id(N'[Cx_showDk]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

begin

CREATE PROCEDURE Cx_showDk
……
end

------------------------------

楼主可以用动态SQL来创建存储过程

shuihan20e 2012-06-11
  • 打赏
  • 举报
回复
用";"分开,或者放到stringlist里顺序执行
bdmh 2012-06-11
  • 打赏
  • 举报
回复
ado中的sql不支持换行,你写成一个连着的string试试
kyle_huang 2012-06-11
  • 打赏
  • 举报
回复
你那能直接在Delphi用么?
e_shark 2012-06-11
  • 打赏
  • 举报
回复
if exists(select name from sysobjects where name='yourman' and type='p')
drop procedure yourname
go

create procedure yourname
.....
yangqi613 2012-06-10
  • 打赏
  • 举报
回复
我换了个思路,先删除,再创建,也不行。

报错提示:'CREATE PROCEDURE' 必须是批查询中的第一条语句。.


DROP PROCEDURE Cx_showDk

CREATE PROCEDURE Cx_showDk
……

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧