存储过程中怎么使用字符串参数?
我想用字符串传递表名:
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
应该就知道怎么解决了 ~~~~~~~~~~~~~~~~~~~~~~~