CREATE PROCEDURE [chazhao] @ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS select fie from scrb where ddbh=@ddbh and ys=@ys and zb=@zb and sb=@sb order by lrq
字段不能作为参数传递你可以这么做:CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS declare @str select @str='select '+@fie+' from scrb where ddbh=@ddbh and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq ' exec (@str) go
为啥要动态,TABLE的字段是死的, 判断一下不就行了
if @fie='a' select a form if @fie='b' select b form . . . ...
不好意思,漏了一个CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS declare @str select @str='select '+@fie+' from scrb where ddbh='''+@ddbh+''' and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq ' exec (@str) go
你用过没有query的字段如 select * from scrb 你把query的active=true 双击query把query的字段名全部加入到query里面 这时你可以设置字段的显示名称和颜色、大小等 把你需要的字段加就去就可以了你可以动态的实现你的问题,不过要多用query了 如果还没有明白,那我就不要分了
又漏了 DECLARE @STR(4000)
完整的应该是:CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS declare @STR VARCHAR(4000)select @str='select '+@fie+' from scrb where ddbh='''+@ddbh+''' and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq ' exec (@str) go 有点迷糊:),
用这样的方法try: 将@fie设为:OUTPUT的参数,在DELPHI中调用传递参数时也声明参数为OUTPUT的,这样就可以得到参数的返回结果了。CREATE PROCEDURE [chazhao] @fie varchar(50) OUTPUT,@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS select @fie from scrb where ddbh=@ddbh and ys=@ys and zb=@zb and sb=@sb order by lrq sql.add('Exec chazhao @fie='''+fie+''' OUTPUT,@ddbh='''+trim(combobox1.Text)+''',@ys='''+trim(combobox8.Text)+''',@zb='''+trim(combobox9.Text)+''',@sb='''+trim(combobox6.Text)+''' '); zd:=fie;
fredfei(飞飞) 的可能正确 用Exec()来执行动态SQL语句
在Sql Server 2000 中不能直接使用动态表名,据说Sybase 12 能够处理动态表名; 飞飞那样处理还不如在query里处理。
if object_id('dbo.tt')is not null drop procedure dbo.tt go CREATE PROCEDURE tt (@fie varchar(50) output, @ddbh varchar(50) output) AS declare @str VARCHAR(4000)
select @str='select '+@fie+' from 初一 where 姓名='''+@ddbh+''' 'exec(@str) print @fie print @ddbh print @str go exec tt 数学,帝国
如果不用@fie参数,如何使select后的字段名是动态的?
看一下QUERY3里面是否有记录?
如有是不是你想要的记录?
是否有你用FILE参数传递的字段的名字?
select fie from scrb
where ddbh=@ddbh and ys=@ys and zb=@zb and sb=@sb
order by lrq
AS
declare @str
select @str='select '+@fie+' from scrb
where ddbh=@ddbh and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq '
exec (@str)
go
判断一下不就行了
select a form
if @fie='b'
select b form
.
.
.
...
举个例子:
我将参数fie用常数'dl'来传递,程序执行完后,query3的字段名不是'dl'
而是它的记录值是'dl'。
china_lyz(彦召软件工作室):
如你后面所列出的存储过程在delphi中执行好象通不过,因为我要查找的字段名不只是fie字段,而我是要将fie做成是动态的,可以根据参数来改变!还请各位多多指点!
直接用
SELECT * fromdelphi程序不变
我用了你的方法后,在程序中调用时,出现如下错误:
unclosed quotation before the character string''
还请继续指点!
对了,我还在你的过程语句中修改如下:
1、在@str后加 varchar950;
2、将go去掉;
不好意思,不修改,语法有错!china_lyz(彦召软件工作室) :
DDBH,YS,SB是我用到的字段名,但它们是用在where语句中,是可以通过的!
没错!query3的第一条记录与字段名是相同的!
我以前也遇到过这样的问题
我以前也遇到过这样的问题
SELECT * from
把所有字段都选出来
然后在前台控制,难道不行
不好意思,我还没理解你的意思,你说改变QUERY3的显示标题是啥意思?
请解释!
我的问题若解决了,一定给你加分!
不好意思,漏了一个CREATE PROCEDURE [chazhao] @fie varchar(50),@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50)
AS
declare @str
select @str='select '+@fie+' from scrb
where ddbh='''+@ddbh+''' and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq '
exec (@str)
go
select * from scrb
你把query的active=true
双击query把query的字段名全部加入到query里面
这时你可以设置字段的显示名称和颜色、大小等
把你需要的字段加就去就可以了你可以动态的实现你的问题,不过要多用query了
如果还没有明白,那我就不要分了
DECLARE @STR(4000)
AS
declare @STR VARCHAR(4000)select @str='select '+@fie+' from scrb
where ddbh='''+@ddbh+''' and ys='''+@ys+''' and zb='''+@zb+''' and sb='''+@sb +''' order by lrq '
exec (@str)
go 有点迷糊:),
将@fie设为:OUTPUT的参数,在DELPHI中调用传递参数时也声明参数为OUTPUT的,这样就可以得到参数的返回结果了。CREATE PROCEDURE [chazhao] @fie varchar(50) OUTPUT,@ddbh varchar(50),@ys varchar(50),@zb varchar(50),@sb varchar(50) AS
select @fie from scrb
where ddbh=@ddbh and ys=@ys and zb=@zb and sb=@sb
order by lrq sql.add('Exec chazhao @fie='''+fie+''' OUTPUT,@ddbh='''+trim(combobox1.Text)+''',@ys='''+trim(combobox8.Text)+''',@zb='''+trim(combobox9.Text)+''',@sb='''+trim(combobox6.Text)+''' '); zd:=fie;
用Exec()来执行动态SQL语句
飞飞那样处理还不如在query里处理。
我理解你的意思,你的方法是处理数据时都在客户端处理,而我的想法是要调用存储过程让服务器去处理数据!
不过,非常感谢你的支持!amature(啊来):
先谢了!我在这个问题上不是输不出数据,而是输出的数据不正确,因为调用存储过程时,赋予字段参数不对,所以执行结果不对!fredfei(飞飞) :
真的非常感谢你!在你的帮助下,我的存储过程调用成功了!
不过,在存储过程的最后,我不是用go,而是用return,因为用go时
在检测语法时会提示语法错误!
drop procedure dbo.tt
go
CREATE PROCEDURE tt
(@fie varchar(50) output,
@ddbh varchar(50) output)
AS
declare @str VARCHAR(4000)
select @str='select '+@fie+' from 初一
where 姓名='''+@ddbh+''' 'exec(@str)
print @fie
print @ddbh
print @str
go
exec tt 数学,帝国