[英]T-SQL: Creating a temp Table/ table Variable with Flexible structure
我正在基于SQL的报告项目上工作,但是我对数据库的访问受到限制; 我只能进行SELECT查询,并将检索到的数据插入到临时表/表变量中。 我无法创建/执行存储过程或任何类型的功能。
我正在运行的查询旨在将所有工程师及其拥有的不同关键技能集中在一起,以便我们以后可以查看每位工程师具有哪些技能或属于某个技能的工程师。
为此,我试图创建一个具有灵活结构的表变量/临时表,该结构基于同一查询中先前获得的值。
例如
第一输出:Adam Brad Julio Martinez
第二输出(技能用空格隔开):VOIP TTS DBA Exchange Server
创建临时表/表变量,将第一个输出用作行,第二个输出用作列,反之亦然。 然后,我将根据主数据库上的不同值填充此新表。
请告知如何完成此操作,或提供其他解决方案。 谢谢
我相信你可以。
首先,您需要基于查询创建具有动态结构的临时表。 可以这样完成:
声明脚本模板:
设置@ScriptTmpl ='Alter table #tempTable Add [?] varchar(100);
构建脚本,将根据查询插入您需要的列:
选择@TableScript = @TableScript + Replace(@ScriptTmpl,'?',ColumnName)从...
然后执行脚本,然后使用第二个查询的值填充新表
UPD:
这是临时表动态创建的完整示例。 我在示例中使用了全局临时表:
declare @scriptTemplate nvarchar(MAX) declare @script nvarchar(MAX) declare @tableTemplate nvarchar(MAX) SET @tableTemplate = 'create table ##tmptable (?)' SET @scriptTemplate = '? nvarchar(500),' SET @script = '' Drop table ##tmptable Select @script = @script + Replace(@scriptTemplate, '?', [Name]) From Account Where name like 'ES_%' SET @script = LEFT(@script, LEN(@script) - 1) SET @script = Replace(@tableTemplate, '?', @script) Select @script exec(@script) Select * from ##tmptable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.