写了个简单自定义函数如下,作用是根据表名和查询条件从数据库某张表的某个字段中取出数据并返回,但调用该函数时总是报错:必须声明变量 '@tb'。
请教一下是哪里错了。drop function get_result;
go
create function get_result(@tb varchar(100),@condition varchar(100))
returns varchar(4000)
begin
declare @result varchar(4000)
select @result=cp_id from @tb where @condition
return (@result)
end
go--调用
select * from get_result('tb_ua_admin','admin_id=1')
请教一下是哪里错了。drop function get_result;
go
create function get_result(@tb varchar(100),@condition varchar(100))
returns varchar(4000)
begin
declare @result varchar(4000)
select @result=cp_id from @tb where @condition
return (@result)
end
go--调用
select * from get_result('tb_ua_admin','admin_id=1')
go
create proc get_result
@tb varchar(100),
@condition varchar(100),
@result varchar(4000) output
as
select @result=cp_id from @tb where @condition
go
declare @result varchar(25)
exec get_reslult 'tb_ua_admin','admin_id=1',@result output print @result
go换成了存储过程还是报:必须声明变量 '@tb'。
请问怎么改?
drop proc get_reslult
go
create proc get_result
@tb varchar(100),
@condition varchar(100),
@result varchar(4000) output
as
declare @sql nvarchar(1000)
set @sql = N'select @result=cp_id from ' + @tb + ' where ' + @condition
EXEC sp_executesql @sql,N'@result varchar(4000) output',@result output
go
declare @result varchar(25)
exec get_reslult 'tb_ua_admin','admin_id=1',@result output print @result
go
exec get_reslult 'tb_ua_admin','admin_id=1',@result output print @result
go查询分析器咋没输出@result的值呢?
print @result
改成
select @result 试试.
-------------------------
NULL可tb_ua_admin表的cp_id字段明明有值:
CP_ID
---------------------------
1,2
select cp_id from tb_ua_admin where admin_id=1
-------------------------
1,2为什么输出要用:select @result 呢?
以前一直用的print 哦。
select语句的结果通常是在查询分析器的"网格"页面显示;
print语句的结果通常是在查询分析器的"消息"页面显示.
------------------------------------------------------------------------
不能.因为函数内部不允许使用EXEC执行除了扩展存储过程以外的存储过程(如系统存储过程或自定义的存储过程).
------------------------------------------------------------------------
肯定显示了,不过因为你定义的@result的长度太长了,跑到最右边去了.拖动横向滚动条到右侧就能看到了.