在SQL Server 2008的"From"子句中使用表名称的变量

Dav*_*veK 5 .net sql t-sql sql-server

我有一个UDF从表中查询数据.但是,该表需要作为参数定义.例如我不能:

选择*来自[dbo].[TableA]

我需要这样的东西:

选择*来自[dbo].[@ TableName]

上面的行不起作用,UDF也禁止我将查询设置为字符串并调用exec().我可以在一个过程中执行此操作,但我也无法从UDF调用该过程.

有没有人知道如何在没有某种大规模切换声明的情况下在UDF中实现这一目标?

joh*_*ash 21

SET @SQL = 'SELECT * FROM ' + @table
EXEC (@SQL)  -- parentheses are required
Run Code Online (Sandbox Code Playgroud)


And*_*mar 7

这是不可能的,函数中不支持动态SQL.

请参阅此SO问题: 在SQLServer 2005函数中执行动态SQL

  • 当使用普通 UDF 时,这个答案是正确的(这就是我所问的)。我能够使用 C# 编写的 CLR UDF 解决我的问题。 (2认同)

aha*_*ins 5

您可以UNION ALL表,并将表名作为列包含在内,然后将表名指定为谓词.如果您检查此示例的查询计划,则会看到未触及t2

create table t1 (i int)
create table t2 (i int)

insert t1 values(1)
insert t1 values(2)
insert t1 values(3)
insert t2 values(4)
insert t2 values(5)
insert t2 values(6)


;with tableSet as (
    select i, 't1' as tableName from t1
    union all select i, 't2' as tableName from t2
)
select i from tableSet where tableName = 't1'
Run Code Online (Sandbox Code Playgroud)