如,报错
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)
*/