当前位置: 首页 > 面试题库 >

有没有一种方法可以将表名指定为字符串?

阳福
2023-03-14
问题内容

让我们说我有这样的查询:

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


 类似资料:
  • 问题内容: 我的网页上有一个“瘦”列表:例如,一个包含100个项目的列表,每个项目的长度为一个单词。为了减少滚动,我想在页面的两列甚至四列中显示此列表。我该如何使用CSS? 我希望该解决方案具有灵活性,这样,如果列表增加到200个项目,则无需进行很多手动调整即可容纳新列表。 问题答案: ul { -moz-column-count: 4; -moz-column-gap: 20px; -webki

  • 简而言之:有没有一种方法可以在gcc或CLANG中不推荐命名空间? 长: 现在我想知道是否有更好的方法来做类似的事情,比如将名称空间util的使用标记为不推荐使用。 我们使用GCC4.7.3作为生产编译器,但是针对clang进行构建和测试,以尝试捕捉gcc的细节;因此,在这些编译器上工作的东西会有所帮助。

  • 问题内容: 我想使用CSS来呈现两列布局。我正在使用的标记是 有没有一种方法可以使一列的宽度为20px,而一列的宽度为80px? 问题答案: 不,没有办法。 该功能专为在相等的列之间流动的内容而设计。

  • 在C中,如果值不能为NULL,则通常引用传递而不是指针。 假设我有一个具有以下签名的函数,该签名通常与字符串文字一起使用。 我想知道如何更改函数,使其接受引用(并且具有不接受NULL的优势)? > 另一个选项是

  • 问题内容: 给定一个结构: 以及带有结构名称的字符串 要么 如何从字符串名称而不是结构创建结构的实例?我的想法是,我将使用链接到二进制文件中的所有结构创建一个应用程序,但根据字符串创建运行时实例。(某种元元) 问题答案: Go中没有类型的中央注册表,因此在一般情况下您无法提出要求。 您可以使用从字符串到对应于每种类型的值的映射来手动建立自己的注册表来支持这种功能。例如: 然后,您可以创建如下类型的

  • 问题内容: 我需要转换成,成等。 有没有办法用库或类或其他东西做到这一点? 问题答案: 此代码的大部分是设置数字单词dict,仅在第一次调用时才完成。