INSERT FROM EXISTING SELECT无需修改

时间:2018-02-24 23:49:50

标签: sql sql-server-2008

随着GDPR在英国即将到来,已经拥有一个由15个用户组成的团队,在15个不同的数据库中创建虚假的SELECT语句(超过2,000个),我需要能够创建一个方法来捕获已经创建的SELECT语句并且能够分配代理键/数据而无需重写我们已有的每个程序。

需要像往常一样运行原始团队成员脚本,并且需要伪造值。

我目前的想法是创建一个存储过程:

CREATE PROC Pseudo (@query NVARCHAR(MAX))

INSERT INTO #TEMP FROM @query

通过真实和代理/伪数据的映射表对数据做一些事情。

UPDATE #TEMP
SET FNAME = (SELECT Pseudo_FNAME FROM PseudoTable PT WHERE #TEMP.FNAME = PT.FNAME)
SELECT * FROM #TEMP 

这样团队成员就可以运行正常的SELECT语句,只需使用以下命令获取伪数据:

 EXEC Pseudo (SELECT FNAME FROM CUSTOMERS)

我遇到的问题是你无法使用:

INSERT INTO #TEMP FROM @query

所以我尝试通过CTE:

WITH TEMP AS (@query)

..但我也不能使用它。

当然有一种从现有选择中捕获记录集的方法,我可以将其拉入表中来修改它或捕获SELECT语句;无需修改原始脚本。请注意,每个SELECT语句都是唯一的,因此我无法写出COLUMN或VALUES等。

有没有人对如何最好地解决这个问题有任何想法或工作实例?

我可以从外部做其他冗长的方法来实现这一点,但是如果可能的话,我试图在SQL中解决这个问题。

1 个答案:

答案 0 :(得分:0)

经过一番商议后我才解决了。 我将原始SELECT SQL传递给使用了一些SQL注入的SP,后者执行INSERTed数据时。然后我从该数据集更新。

最终结果是" EXEC Pseudo('原始SQL;') 我现在必须围绕某些列设置一些基本规则作为短期修复。但至少用户可以根据需要创建NonPseudo和Pseudo数据而无需大量重做:)