declare @str nvarchar(3000);
set @str = 'select * from @t';
exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';消息 1087,级别 15,状态 2,第 1 行
必须声明表变量 "@t"。
谢谢。
set @str = 'select * from @t';
exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';消息 1087,级别 15,状态 2,第 1 行
必须声明表变量 "@t"。
谢谢。
set @str = 'select * from @t';
exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';如果你想写一个存储过程的话,可以把@t设置为一个参数
如果你就是想这样用的话
不妨这样写:
declare @str nvarchar(3000);
set @str = 'select * from ';
exec (@str + '@t')
execute sp_executesql
N'select * from pubs.dbo.employee where job_lvl = @level',
N'@level tinyint',
@level = 35
或者这样:declare @str nvarchar(3000)
declare @t varchar(100)
set @str = 'select * from '
set @t='Article'
exec (@str + @t)
而不是连加字符串。
'select * from @table'
像在这样的语句中这个 @table 变量传不进去。
不知道有没有办法解决呢?
set @str = 'select * from @t';
exec sp_executesql @str,N'@t varchar(100)',@t = 'Article';把@t该为临时表
declare @str nvarchar(3000);
set @str = 'select * from #t';
exec sp_executesql @str,N'#t varchar(100)',#t = 'Article';
select @str = 'select * from ', @t='titles'exec(@str+@t)
if object_id('tempdb..#Article') is not null
drop table #Article
GO
----创建测试数据
create table #Article(id int)
insert #Article
select 1 union all
select 2 union alL
select 3----创建SQL字符串
declare @str nvarchar(3000)
set @str = 'EXEC(''select * from '' + @t)'----执行SQL字符串,参数为表名称
exec sp_executesql @str,N'@t varchar(100)',@t = '#Article'----清除测试环境
drop table #Article/*结果
id
------------------
1
2
3
*/
如果是set @str = 'aaa' + 'bbb'则有数量限制,不能超过@str声明的长度.