传递表名到存储过程进行操作

ymli 2003-04-16 04:00:27
如下存储过程:
CREATE PROC DBO.TEST
@No varchar(50)

IF EXISTS(SELECT 序号 FROM Table1
WHERE 序号=@No)
BEGIN
SELECT * FROM Table1
RETURN (1)
END

现在想用一个变量@TableName varchar(10)
代换Table1。能否做到?
...全文
57 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymli 2003-04-17
  • 打赏
  • 举报
回复
多谢相助。但是,RETURN (1)怎么办?语句中好像不支持RETURN值。如果
declare @retcode SMALLINT
EXEC('SET '+@retcode+'=1')调试通不过?语法上如何改?
pengdali 2003-04-17
  • 打赏
  • 举报
回复
例:

Create Procedure GetMaxID
@TableName varchar(100), @ID int output
as
begin
declare @sql nvarchar(1000)
set @sql='select @ID = max(ID) from '+@TableName
exec sp_executesql @sql,N'@id int output',@id output
end
愉快的登山者 2003-04-16
  • 打赏
  • 举报
回复
CREATE PROC DBO.TEST
@No varchar(50),
@TableName varchar(10)
as
exec('IF EXISTS(SELECT 序号 FROM '+@TableName +'
WHERE 序号='''+@No+''')
BEGIN
SELECT * FROM '+@TableName+'
END')

caiyunxia 2003-04-16
  • 打赏
  • 举报
回复
自己查查EXECUTE和sp_executesql 的帮助
pengdali 2003-04-16
  • 打赏
  • 举报
回复
优化一下:

CREATE PROC DBO.TEST
@No varchar(50),
@TableName varchar(10)

exec('IF EXISTS(SELECT 1 FROM '+@TableName+'
WHERE 序号='''+@No+''')
SELECT * FROM '+@TableName)
pengdali 2003-04-16
  • 打赏
  • 举报
回复
CREATE PROC DBO.TEST
@No varchar(50),
@TableName varchar(10)

exec('IF EXISTS(SELECT 序号 FROM '+@TableName +'
WHERE 序号='''+@No+''')
BEGIN
SELECT * FROM '+@TableName+'
END')
online 2003-04-16
  • 打赏
  • 举报
回复
不行的,表名做参数不支持
楼上说的没试过
caiyunxia 2003-04-16
  • 打赏
  • 举报
回复
用动态SQL
EXEC ('SELECT * FROM @TableName' )
yll6865 2003-04-16
  • 打赏
  • 举报
回复
据我所知,sqlserver数据库存储过程不支持数据库表名作参数。

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧