从包含object_id

时间:2018-03-18 21:30:25

标签: sql sql-server database

是否可以在SQL Server中选择这样的数据?

select * 
from table(object_id)

我想将object_id作为参数传递给select,因为我需要从一个看起来不同且每次都有不同名称的全局temptable中进行选择。 object_id我是这样的:

select object_id('tempdb..##temptableXXX')

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

你可以用一点T-SQL来做到这一点:

declare @tablename nvarchar(max)
select @tablename = name from sys.tables
where object_id = select object_id('tempdb..##temptableXXX')

declare @sql nvarchar(max) =
'select * from ' + @tablename
exec (@sql)

答案 1 :(得分:2)

您可以执行以下操作,即使答案看起来与已经提供的内容非常相似。但是,这允许您在ie表值函数视图等中添加多个表。

它还考虑到对象不在调用用户的默认架构,并在from子句中使用两部分名称,即[Schema].[Table]

它还使用QUOTENAME()函数保护您免受SQL注入攻击。

/* input param*/
Declare @object_id  INT = 117575457;


Declare @SchemaName SYSNAME 
      , @TableName  SYSNAME
      , @Sql        NVARCHAR(MAX);

SELECT  @TableName  = [name] 
      , @SchemaName = SCHEMA_NAME([SCHEMA_ID]) 
from    sys.objects
WHERE   [type_desc] = 'USER_TABLE'  --<- Can use IN Clause to add functions veiws etc
  AND   [object_id] = @object_id;   --<-- User Input variable

 SET @sql = N' SELECT * FROM ' 
          + QUOTENAME(@SchemaName) + N'.' + QUOTENAME(@TableName); 

 Exec sp_executesql @sql;