表名为变量的存储过程怎么写?

comflyer0590 2005-06-25 06:29:59
我写了一个存储过程:
CREATE proc select_record
@table_name varchar(20)
as
SELECT TOP 5 * FROM [@table_name] ORDER BY ID DESC
GO

在c#里调用:
SqlCommand comm = new SqlCommand("select_record", conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add("@table_name", SqlDbType.VarChar, 11);
comm.Parameters["@table_name"].Direction =ParameterDirection.Input;
comm.Parameters["@table_name"].Value = "accident.accident.危险化学品";
SqlDataReader dtr;
dtr=comm.ExecuteReader();

运行时老报错:
异常详细信息: System.Data.SqlClient.SqlException: 对象名 '@table_name' 无效。

不知是存储过程有问题还是其他地方的问题?? 谢谢各位!!!
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
summerICEREDTEA 2005-07-21
  • 打赏
  • 举报
回复
少了两空格 -.-
summerICEREDTEA 2005-07-21
  • 打赏
  • 举报
回复
CREATE proc select_record
@table_name varchar(20)
as
declare @s varchar(200)
set @s='SELECT TOP 5 * FROM' +@table_name+ 'ORDER BY ID DESC'
exec(@s)
GO
jjlook 2005-07-21
  • 打赏
  • 举报
回复
CREATE proc select_record
@table_name varchar(20)
as
declare @sql varchar(1000)
set @sql='SELECT TOP 5 * FROM '+@table_name+' ORDER BY ID DESC'
execute @sql
GO
vivianfdlpw 2005-07-21
  • 打赏
  • 举报
回复

CREATE proc select_record
@table_name varchar(20)
as
exec('SELECT TOP 5 * FROM ['+@table_name+'] ORDER BY ID DESC')
GO
lcqg 2005-07-21
  • 打赏
  • 举报
回复
SELECT TOP 5 * FROM [@table_name] ORDER BY ID DESC

这句采用 exec ('SELECT TOP 5 * FROM '+@table_name+' ORDER BY ID DESC')写法,

也就是说有表名做变量的时候应采用动态sql语句写法
高无忌 2005-07-21
  • 打赏
  • 举报
回复
CREATE proc select_record
@table_name varchar(20)
as
exec('SELECT TOP 5 * FROM '+@table_name+' ORDER BY ID DESC')
GO
comflyer0590 2005-06-25
  • 打赏
  • 举报
回复
顶!!!

34,590

社区成员

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

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