当前位置: 代码迷 >> Sql Server >> 可不可以用sp_executesql动态生成临时表
  详细解决方案

可不可以用sp_executesql动态生成临时表

热度:73   发布时间:2016-04-24 10:25:49.0
能否用sp_executesql动态生成临时表
本帖最后由 CXJ0062008 于 2014-07-04 08:13:11 编辑
如,报错
declare @ba varchar(20)='sss',@aa varchar(20)
declare @sql nvarchar(max)='create table @aa(ar varchar(20))'
print @sql
exec sp_executesql 
@sql,
N'@aa as varchar(20)',
@ba

------解决方案--------------------
declare @ba varchar(20)='sss'
declare @aa varchar(20)
declare @sql nvarchar(max)='create table #aa(ar varchar(20));select * from #aa'   --临时表#开头的哦。
--print @sql
exec sp_executesql @sql,N'@aa as varchar(20)',@ba

------解决方案--------------------
可以,但不推荐这样弄
------解决方案--------------------
exec sp_executesql  可以生成臨時表,但作用範圍只能是 sp_executesql  內部。外面是無法調用,除非你定義了全局臨時表。

E.g.


use tempdb
go
exec sp_executesql N'create table #1(id int)'
select * from #1

/*
Msg 208, Level 16, State 0, Line 2
Invalid object name '#1'.

*/
go

exec sp_executesql N'create table ##2(id int)'
select * from ##2

/*
(0 row(s) affected)
*/