有熟SQL sever7的吗?帮哦看一下

withhold 2000-08-31 05:54:00
CREATE PROCEDURE sp_hgp_select
@strpara varchar(50)
AS
set @strpara="select * from HGP where id<>null and " + @strpara
exec @strpara

exec sp_hgp_select "kfdh='1213123'" 在执行时报错:
Server: Msg 2812, Level 16, State 62, Line 5
Could not find stored procedure 'select * from HGP where id<>null and kfdh='1213123'.

主要是想通过存储过程实现灵活的条件查询
...全文
210 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoyiqian 2000-09-07
  • 打赏
  • 举报
回复
朋友:你好
你这段程序确实有错.
1. id<>null不对,应该为 id is not null
2. 执行时参数代入格式不对,参数是条件 + 字符型值时,不能写成 "kfdh='1213123'",但可以写成"kfdh=1213123",系统会自动将1213123认为为字符型.
3. 执行动态SQL语句时格式不对, 应加括号,即 exec (@strpara)
4. 注意点(不是错误), 用户自定义存储过程的名称不要使用 sp_开头,sp_开头的存储过程为系统存储过程.

以上程序修改如下:
CREATE PROCEDURE hgp_select
@strpara varchar(50)
AS
set @strpara="select * from HGP where id is not null and " + @strpara
exec (@strpara)

exec hgp_select "kfdh=1213123"
guoyiqian 2000-09-07
  • 打赏
  • 举报
回复
withhold:你好!
如果@strpara包含多个条件且条件个数不知的情况下,可以有二种方法解决该问题.
方法一:通过DB-Library编程,动态生成存储过程.我以前在SYBASE数据库下使用过,但该方法要有C编程经验,同时要熟悉DB-Library,比较难使用.我建议你使用方法二.

方法二:我猜想你应该是前台使用种数据库开发工具(PB,VB或其它),后台使用SQL SERVER数据库.
而多条件是由前台决定的. 若是这种类型,则:
第一步,你可以在后台建立一个专门存放条件的表.表结构为
CREATE TABLE dbo.cond
(condition varchar(2000) NOT NULL,
iden_id int IDENTITY NOT NULL --系统流水号,读写数据时不要理会该字段
, CONSTRAINT cond_p
PRIMARY KEY NONCLUSTERED
(iden_id)) ;
前台决定好的条件先在前台动态拼接好,如 where col1='abc' and col2='efg' and id=50,将拼接好的条件存放到条件表中 .
第二步,建立存储过程
CREATE PROCEDURE hgp_select
AS
declare @strsql varchar(2000), @condition varchar(2000)
select @condition = condition from cond
set @strsql="select * from HGP " + @condition
exec (@strsql)

调用该存储过程: exec hgp_select

细节注意点:1. 应考虑系统是多用户的,该程序必须允许多个人同时选择不同条件,同时得到各自的所需数据,所以在条件表最好再加上一个操作员(注:不同人执行该程序,应该为不同的操作人员),这样可以区分条件是谁的.在存储过程中,同样要有操作人员.
2. 在存储过程中拼接条件时,即做select @condition = condition from cond
set @strsql="select * from HGP " + @condition动作时,应该判断条件表中是否取到了条件.因为 变量 + Null = Null

很高兴我们能相互探讨问题.有空联系


withhold 2000-09-07
  • 打赏
  • 举报
回复
guoyiqian,谢谢指点.
但问题该没彻底解决,
如果@strpara包含多个条件,
如:"col1=11212 and col2=112",
则无法正确执行,还请帮忙看看,多谢!
Iwant 2000-09-04
  • 打赏
  • 举报
回复
我还不知道在后台可以这样写 proc
whitehare 2000-09-03
  • 打赏
  • 举报
回复
Bad Command or file name
Wonny 2000-09-01
  • 打赏
  • 举报
回复
太对了。
hoyle 2000-09-01
  • 打赏
  • 举报
回复
完全正确
mnbvcxz 2000-08-31
  • 打赏
  • 举报
回复
exec (@strpara)

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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