日期:2014-05-19  浏览次数:20373 次

存储过程中的参数问题
我写了一个这样的存储过程
create   procedure   TableSelect
@tablename   varchar(80)
as
begin
SELECT   *   FROM   @tablename
end

老提示我“必须声明变量@tablename“,是不是参数不能用在From后面
正确的写法应该是什么。

------解决方案--------------------
没有这种类型的动态查询~~~是非法的~
如果非要用这样的方法~那就这样吧~~
create procedure TableSelect
@tablename varchar(80)
as
if (@tablename= 'tb1 ') --或者用CASE语句~~
select * from tb1
if (@tablename= 'tb2 ')
select * from tb2
if (@tablename= 'tb3 ')
select * from tb3
if (@tablename= 'tb4 ')
select * from tb4
...

建议不要那么做~~我在学SQL的时候也那么想过~~ 学到最后觉得自己的想法很傻~~


------解决方案--------------------
SQL没有定义的数组~~可以定义虚拟数组(就是个表)~要使用的话自己创建~~按照自己的 方式~~
比如
declare @tb table (id int identity(1,1),con nvarchar(100))
insert @tb select '111 '
select * from @tb
这个临时表id可以表示数组下标,con可以拿来表示每个元素的值~~
你觉得如何?
------解决方案--------------------
你写的存储过程语法错误,在参数后面差逗号~~
create proc TableDelete
@tablename varchar(80),
@id int(4)
as
exec ( 'delete from '+@tablename+ 'where 标识号= '+@id)
就可以了

------解决方案--------------------
还有个问题INT类型数据 不应该指定宽度~~
把(4)去掉