【问题标题】:Using table variable with dynamic fields as input for dynamic SQL使用带有动态字段的表变量作为动态 SQL 的输入
【发布时间】:2020-11-23 09:09:33
【问题描述】:

我想在动态查询中使用表。但是表格的列不是固定的,它们可能会发生变化。

declare @t table(ID int, Fname varchar(50), Lname varchar(50)); -- Columns may change
insert into @t(ID, Fname, Lname)
values
(1, 'Jack', 'Martinez'),
(2, 'Alex', 'Desoza');

我试过下面的代码:

declare @tablename nvarchar(max) = '@t'
declare @query nvarchar(max) = 'select * from '+ @tablename 
exec sp_executesql @query 

但我唯一得到的是:

必须声明标量变量“@t”。

【问题讨论】:

标签: sql sql-server sql-server-2017


【解决方案1】:

您需要将表变量的定义带入代码的“动态”部分:

declare @query nvarchar(max) = '
declare @t table(ID int, Fname varchar(50), Lname varchar(50));
insert into @t(ID, Fname, Lname)
values
(1, ''Jack'', ''Martinez''),
(2, ''Alex'', ''Desoza'');
select * from @t' 
exec sp_executesql @query

【讨论】:

  • 这提出了一个问题,即当语句不再是动态时,为什么还要使用动态语句。
  • 这是一个很好的观点@Larnu。可以动态填充表变量声明中的列列表以及 INSERT 列中的值。
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多