存储过程中,表名使用变量语句怎么写

hztgcl1986 2007-08-07 11:09:49
Select @start=UserID From @TableName Order By UserID

在存储过程中,表名使用变量@TableName,还有就是要把UserID赋值给变量@start
我这样写Execute( 'Select ' + @start + '=UserID From ' + @TableName + 'Order By UserID'),可是不正确, 应该怎么写语句呢?
...全文
241 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztgcl1986 2007-08-07
  • 打赏
  • 举报
回复
我不需要output

比较长的那部分就是完整代码,根本就没有@handle变量,我也不知道怎么回事
Set @sql=N'Select @Sum=Count(*) From [' + @TableName + '] Where ' + @WhereStr
Execute sp_executesql @sql,N'@Sum int',@Sum --获得总记录数

这条语句是对的,可是,到了这句就出错呢

Set @sql=N'Select @start=UserID From ' + @TableName + 'Order By UserID'
Execute sp_execute @sql,N'@start int',@start
OracleRoob 2007-08-07
  • 打赏
  • 举报
回复
--用动态SQL语句


--如何将exec执行结果放入变量中?

declare @num int, @sql nvarchar(4000)
set @sql='select @a=count(*) from tableName '
exec sp_executesql @sql,N'@a int output',@num output
select @num

paoluo 2007-08-07
  • 打赏
  • 举报
回复
兩段代碼不一致,上面的有outout,下面的沒有。

另外,看錯誤提示,

过程需要参数 '@handle' 为 'int' 类型。

不關這條語句的事啊。

也沒有看到@handle這個變量。

hztgcl1986 2007-08-07
  • 打赏
  • 举报
回复
要实现分页功能,上面上完整代码,哪位高手指点一下
hztgcl1986 2007-08-07
  • 打赏
  • 举报
回复
CREATE Procedure HZT
--表名称,页数,每页记录数,显示字段,排序字段,条件
(@TableName varchar(255),@PageNum int,@PageSize int,@ShowFields varchar(1986),@OrderFields varchar(255),@WhereStr varchar(255))

As

Set Nocount On
Begin
If @PageNum<=1 --页数为1或小于1
Begin
Set RowCount @PageSize --类似于Top
Execute('Select ' + @ShowFields + ' From SZY_User Where (' + @WhereStr + ') Order By ' + @OrderFields)
End
Else
Begin
Declare @start int,@end int,@Sum int,@i int,@sql nvarchar(4000)

Set @sql=N'Select @Sum=Count(*) From [' + @TableName + '] Where ' + @WhereStr
Execute sp_executesql @sql,N'@Sum int',@Sum --获得总记录数
If @PageNum>Ceiling(Convert(Decimal,@Sum)/@PageSize)
Begin
Set @PageNum=Ceiling(Convert(Decimal,@Sum)/@PageSize) --末页
End


Set @i=@PageSize*(@PageNum-1)
Set RowCount @i

就是这一行有错误:Set @sql=N'Select @start=UserID From ' + @TableName + 'Order By UserID'
Execute sp_execute @sql,N'@start int',@start
--Select @start=UserID From SZY_User Order By UserID --开始之前的一条记录,Where @WhereStr

Set @i=@PageSize*@PageNum
Set RowCount @i
Select @end=UserID From SZY_User Order By UserID --结束记录

Set RowCount 0
Execute('Select ' + @ShowFields + ' From SZY_User Where UserID>' + @start + 'And UserID<=' + @end + ' Order By ' + @OrderFields)
End
End
GO
hztgcl1986 2007-08-07
  • 打赏
  • 举报
回复
Set @sql=N'Select @start=UserID From ' + @TableName + 'Order By UserID'
Execute sp_execute @sql,N'@start int Output',@start Output

服务器: 消息 214,级别 16,状态 2,过程 sp_execute,行 31
过程需要参数 '@handle' 为 'int' 类型。

不行呢
paoluo 2007-08-07
  • 打赏
  • 举报
回复
Declare @start int,@TableName varchar(255)
Declare @S Nvarchar(300)
SET @S = 'Select @start=UserID From ' + @TableName + ' Order By UserID'
EXEC sp_executesql @S, N'@start int output', @start output
hztgcl1986 2007-08-07
  • 打赏
  • 举报
回复
我的变量已经声明过了
Declare @start int,TableName varchar(255)
paoluo 2007-08-07
  • 打赏
  • 举报
回复
DECLARE @start Varchar(10), @S Nvarchar(300), @TableName Varchar(100)
SET @S = 'Select @start=UserID From ' + @TableName + ' Order By UserID'
EXEC sp_executesql @S, N'@start Varchar(10) output', @start output
paoluo 2007-08-07
  • 打赏
  • 举报
回复
hztgcl1986() ( ) 信誉:100 2007-8-7 11:56:39 得分: 0



我不需要output

---------------

你這個需要output,不然@start沒辦法得到值
hztgcl1986 2007-08-07
  • 打赏
  • 举报
回复
非常感谢“paoluo(一天到晚游泳的鱼)”

原来是我把"sp_executesql"写成了"sp_execute"

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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