我有一个 CLR 函数,它返回带有随机数据的“n”行。例如,要准备一个包含 100 行测试数据的空表,我可以编写
INSERT INTO CustomerInfo(FirstName, LastName, City...)
SELECT FirstName, LastName, City...
FROM MyCLRFunction(100)
这将返回 100 个带有随机信息的“客户”。如果我用非常高的数字调用它,我会收到内存不足错误,因为整个数据集是在发送给调用者之前创建的。当然,我可以使用 SqlPipe 对象并在创建行时发送行,但据我所知,您只能将这种方法与 SqlProcedures 一起使用。这意味着我不能使用 INSERT INTO 方法,因为你不能从存储的过程中选择。
我希望我在这里遗漏了一些东西,并且实际上可以将 SqlPipe.SendResultRow 与一个函数结合起来,或者有人有一个聪明的解决方法。
我可以将其保留为 proc,并让该 proc 将这些记录放入会话范围的临时表中。然后调用者可以在他们的 SELECT 子句中使用该表,但我希望最好的世界,我可以为调用者提供一个很好、干净的语法,并且仍然可以扩展到大量记录。
坦率地说,最初的解决方案可能“足够好”,因为我们可能永远不会想要这么多的测试数据,即使我们想要,我们也可以多次运行 INSERT 语句。但我试图全面了解 CLR 集成,并想知道如果类似的用例出现在业务场景中,我将如何解决这个问题。