1

我正在开发一个基于 SQL 的报告项目,但我限制了对数据库的访问;我只能进行 SELECT 查询并将检索到的数据插入到临时表/表变量中。我无法创建/执行存储过程或任何类型的函数。

我正在运行的查询旨在将所有工程师以及他们拥有的不同关键技能汇集在一起​​​​,以便我们稍后可以查看每个工程师拥有哪些技能或哪些工程师属于某种技能。

为此,我正在尝试创建一个具有灵活结构的表变量/临时表,该结构基于先前在同一查询中获得的值。

例如

第一个输出:亚当·布拉德·胡里奥·马丁内斯

第二个输出(以空格分隔的技能):VOIP TTS DBA Exchange Server

创建使用第一个输出作为行和第二个输出作为列的临时表/表变量,反之亦然。然后,我将根据主数据库上的不同值填充这个新表。

请告知如何做到这一点,或提供任何其他解决此问题的方法。谢谢

4

2 回答 2

2

我相信你可以。

首先,您需要根据查询创建具有动态结构的临时表。可以这样做:

声明脚本模板:

Set @ScriptTmpl = '改变表 #tempTable 添加 [?] varchar(100);

构建脚本,它将根据查询插入您需要的列:

选择 @TableScript = @TableScript + Replace(@ScriptTmpl, '?', ColumnName) 来自 ... 哪里 ...

然后执行脚本,然后用第二个查询中的值填充新表

升级版:

这是临时表动态创建的完整示例。我在示例中使用了全局临时表:

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
于 2014-08-22T10:05:11.700 回答
0

首先,您可以通过pivots而不是临时表来实现您想要的。

其次,如果你真的想创建一个列名为“Adam Brad”的表,解决方案是动态 SQL,根据你的权限,你可能无法做到。

于 2014-08-22T10:16:29.310 回答