我需要一种通过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删除并在内部重新创建表格而随时间发生变化。它只是感兴趣,我很难找到有关它的信息。
答案 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会随着时间的推移而发生变化。