是否可以在SQL Server中选择这样的数据?
select *
from table(object_id)
我想将object_id作为参数传递给select,因为我需要从一个看起来不同且每次都有不同名称的全局temptable中进行选择。 object_id我是这样的:
select object_id('tempdb..##temptableXXX')
感谢您的帮助!
答案 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;