sql - 有没有办法将表名指定为字符串?

标签 sql sql-server sql-server-2008

假设我有一个这样的查询:

SELECT * FROM 
(
  SELECT * FROM 
  (
    SELECT * FROM DB.dbo.Table
  )
  INNER JOIN DB.dbo.Table ON ...

我通过手动更改各处的字符串,对不同的表多次运行此查询。我尝试声明以下内容:

DECLARE @tablename AS VARCHAR(255)
SET @tablename = 'DB.dbo.Table'

但这似乎不起作用,因为它向我抛出一个错误,指出我需要将 @tablename 声明为表变量,然后才能使用它。如何模板化我的表名?如果可能的话,Intellisense 仍然有效吗?

最佳答案

您可以将其包装在 EXEC 语句中,如下所示:

declare @my_tablename nvarchar(100) = 'mytable';
exec('
SELECT * FROM 
(
  SELECT * FROM 
  (
    SELECT * FROM ' + @my_tablename + '
  )
  INNER JOIN ' + @my_tablename + ' ON ...'
);

但是不,智能感知在这种情况下不起作用。

如果您提前知道输出是什么样子,那么您可以声明一个临时表来保存结果,然后您可以在没有 EXEC 的情况下访问它。您将在临时表上拥有智能感知。

例如:

  --this must match whatever your SELECT is going to return
  CREATE TABLE #results(
    FIELD1 INT
   ,FIELD2 NVARCHAR(100)
   ,FIELD3 BIT
   );

EXEC('
  INSERT INTO #results(field1,field2,field3)
  SELECT FIELD1,FIELD2,FIELD3 FROM ' + @my_tablename
);

select * from #results  --you will have intellisense on #results

关于sql - 有没有办法将表名指定为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877624/

相关文章:

sql - 删除重复记录,保留一条

sql - 使用数据库表作为队列

mysql - 如何在mysql中将0值更改为 '-'

java - Hibernate 映射与 group by 子句?

选择查询中的 SQL 条件变量

sql - 初学者的 SQL : How do I find a detached database?

c# - IN 子句与 WHERE 子句在 SQL Server 中未获得正确的结果

sql-server - 围绕缺少跨数据库外键引用的 SQL 设计

sql-server - 从 XML 转换为 SQL Server 日期时间时出现毫秒错误

c# - 需要自定义 .NET 应用程序搜索解决方案