日期:2014-05-18  浏览次数:20589 次

存储过程中怎么使用字符串参数?
我想用字符串传递表名:

create   proc   [dbo].[DeleteMulti](@forumID   int,   @tableName   char(50))
AS
...

if   (Exists(Select   ID   from   '@tableName '   where   ParentID=@temp   and   ForumID=@forumID))
begin
select   @delID=ID   from   '@tableName '   Where   ParentID=@delID     and   ForumID=@forumID
set   @temp   =   @delID
end
...

为什么老说我没有声明@tableName变量呢?
@tableName不是传入的参数吗?

------解决方案--------------------
查询对象是不能用变量的,因此需要组织动态SQL来做

------解决方案--------------------
要用动态sql的。

declare @str= 'select * from tab where id = ' '01 ' ' '
exec (@str)
------解决方案--------------------
你去看看我的帖子也许就知道为什么了!
原帖如下:
我用的是SQLserver2000的数据库
一个NewSystem数据库,包含一个Classes表,表中有一个ClassName列。
我想通过存储过程来查询,创建一个存储过程queryClass
存储过程定义如下:
use NewSystem
go
create procedure queryClass
@condition varchar(20),
@columnName varchar(20)
as
select ClassName
from Classes
where @columnName = @condition
go

然后我在SQL查询分析器中输入
exec queryClass 'SoftTwo ', 'ClassName '
或者 exec queryClass 'SoftTwo ',ClassName
或者 exec queryClass SoftTwo, 'ClassName '
或者 exec queryClass SoftTw ',ClassName
怎么就查不出结果啊~~
希望有高手帮我解决一下
注:不能该变这个存储过程的参数个数,
以上的存储过程只是我简化的,
其中我主要是想解决的是
where ClassName = 'SoftTwo ' ;
这2个参数一个有单引号一个没有单引号


回答如下:
create procedure queryClass
@condition varchar(20),
@columnName varchar(20)
as
declare @str varchar(1000)
set @str= 'select ClassName from Classeswhere '+@columnName+ ' = ' ' '+@condition+ ' ' ' '
exec(@str)
go

应该就知道怎么解决了 ~~~~~~~~~~~~~~~~~~~~~~~