在存储过程中如何创建临时表,而且表的列数由存储过程的参数动态确定

barljy 2007-12-06 10:26:45
要求如下:
在存储过程中如何创建一个临时表,而且表的列数由存储过程的参数动态确定。比如参数为3,则表中需创建FCol1,FCol2,FCol3三个字段,若参数为5,则需要创建FCol1,FCol2,FCol3,FCol4,FCol5五个字段
这样的SQL语句这么写?在线等待ing
...全文
135 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxmcxm 2007-12-18
  • 打赏
  • 举报
回复
exec()
创建的临时表,外面是看不到的,要使用临时表,语句只能写在exec里面
benbenkui 2007-12-18
  • 打赏
  • 举报
回复
用EXEC执行语句时,必须加括号
如果是执行存储过程,则不需要

详细说明可以参考联机帮助中的EXECUTE使用说明

sp_executesql,是存储过程。
dingshouqing 2007-12-18
  • 打赏
  • 举报
回复
可以不加的
例:
EXEC sp_executesql @selectStr,N'@depCode varchar(50) output',@cdepCode output
云中客 2007-12-18
  • 打赏
  • 举报
回复
用EXEC执行语句时,必须加括号
如果是执行存储过程,则不需要

详细说明可以参考联机帮助中的EXECUTE使用说明
gahade 2007-12-06
  • 打赏
  • 举报
回复
没办法,SQLServer这样规定的
barljy 2007-12-06
  • 打赏
  • 举报
回复
楼上的方法很不错,受益了
我还向弱弱的问个问题:exec (@s)为什么要把@s括起来,直接写exec @s为什么不行?
fa_ge 2007-12-06
  • 打赏
  • 举报
回复

declare @i int,@j int,@s varchar(1000)
set @i=5
set @j=1
set @s='create table t ('
while @j<=@i
begin
set @s=@s+'fil'+cast(@j as varchar)+' '+ ' varchar(10) ,'
set @j=@j+1
end
set @s=stuff(@s,len(@s),1,'')
set @s=@s+')'
--print @s
exec (@s)

select * from t

/*
fil1 fil2 fil3 fil4 fil5
---------- ---------- ---------- ---------- ----------

(所影响的行数为 0 行)

*/
ldw701 2007-12-06
  • 打赏
  • 举报
回复
mark

34,837

社区成员

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

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