sql – 有没有办法将表名指定为字符串?
发布时间:2020-12-12 16:21:36 所属栏目:MsSql教程 来源:网络整理
导读:我们说我有这样的查询: SELECT * FROM ( SELECT * FROM ( SELECT * FROM DB.dbo.Table ) INNER JOIN DB.dbo.Table ON ... 我通过在任何地方手动更改字符串,使用不同的表多次运行此查询.我尝试声明以下内容: DECLARE @tablename AS VARCHAR(255)SET @tablena
我们说我有这样的查询:
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 ...' ); 但不,intellisense在那种情况下不起作用. 如果您事先知道输出的样子,那么您可以声明一个临时表来保存结果,然后您可以在没有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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |