回 帖 发 新 帖 刷新版面

主题:[讨论]高分!救存储过程动态字段查询的问题!急!!!

各位达人,小弟有个棘手问题:

我在做一个数据库,其中有一张表,字段大致如下:

  食物ID、食物名、蛋白质、糖、水分、胆固醇、热量、……

现在想做一个存储过程,来查询某个营养成分的排名:

  调用存储过程时,我给的参数是3个:成分名、约束、数值,如:

  EXEC '蛋白质','>',25
  EXEC '胆固醇','<',15.2

(每次查询的字段不同、比较的关系也不同,这样的动态变化怎么做?)

并在存储过程用3个变量来接收:

CREATE PROC 成分查询(@成分 VARCHAR(50), @约束 VARCHAR(50),@数值 decimal(7,2))
AS
SELECT 食物名,@成分 FROM 营养表 WHERE @成分 @约束 @数值
GO

存储过程中始终把@开头的作为变量,我想用字符串拼接的方法来做,问题是如何读取出变量中的值?!

如:DECLARE @SQL VARCHAR(500)
  SET @SQL='SELECT 食物名,'+@成分 + 'FROM 营养表 WHERE ' + @成分 @约束 @数值'

这样是有问题的,不止到应该怎么办?[em10]哪位大虾帮帮小弟吧,万分感激!

回复列表 (共6个回复)

沙发

家门,你是学什么的啊,专搞数据库的啊
[em15]

板凳

我不是专搞数据库的,只是自己练习时遇到的问题。

3 楼

declare @sql_str varchar(4000)

 set @sql_str='select '+@变量+' 'from  tablename
exec @sql_str  
这样可以读出变量的值,并执行这条SQL语句
哎,好久没来了

4 楼

这样看行不行:
create procedure pp
  @成份名 varchar(30)= '',
  @约束名 varchar(5)= '',
  @数值   varchar(10) = ''
as
  begin
    declare @set varchar(200)
    set @set = 'select 食物名,'+@成份名+' '+'from 食物名 where '
    set @set = @set + ' ' + @成份名 + ' ' +@约束名 + ' ' +@数值
    exec(@set) 
  
end

go

5 楼

呵呵``看来你是个蛮高手的了!!以后多多指教哦

6 楼

很感谢大家的支持和帮助,前些天网站有故障,所以现在才给大家加分,真是感谢大家啊!~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册