在SQL Server中通过object_id引用表

时间:2016-08-30 10:24:50

标签: sql-server

我需要一种通过id而不是名字来查询表的方法。

使用:

DECLARE @TableId AS INT = 1340567

我需要等效于以下示例:

SELECT TableName.* FROM TableName WHERE TableName.Id BETWEEN 100 AND 199

注意:TableName.Id是TableName的主键。

我想它看起来像:

DECLARE @TableId AS INT = 1340567

SELECT GetTable(@TableId).* FROM GetTable(@TableId) WHERE GetTable(@TableId).Id BETWEEN 100 AND 199

但显然,这不起作用。

注意:我知道 object_ids会随着SQL Server删除并在内部重新创建表格而随时间发生变化。它只是感兴趣,我很难找到有关它的信息。

2 个答案:

答案 0 :(得分:3)

您想要做的事情需要动态SQL,如下所示:

declare @sql nvarchar(max);

set @sql = 'select * from [table] where id between 100 and 199';

set @sql = replace(@sql, '[table]', quotename(object_name(@tableid)));

exec sp_executesql @sql;

答案 1 :(得分:0)

不要这样做。

这是一个非常糟糕的主意,因为当SQL Server在内部删除并重新创建表时,对象的Id会随着时间的推移而发生变化。