У меня есть функция CLR, которая возвращает строки «n» со случайными данными. Например, чтобы воспламенить пустую таблицу с 100 строк тестовых данных я мог бы написатьSQL Server и CLR, пакетная SqlFunction
INSERT INTO CustomerInfo(FirstName, LastName, City...)
SELECT FirstName, LastName, City...
FROM MyCLRFunction(100)
Это вернет 100 «клиентов» со случайной информацией. Если бы я назвал это с очень большим числом, я бы получил ошибку из памяти, так как весь набор данных создается до того, как он будет отправлен вызывающему. Я могу, конечно, использовать объект SqlPipe и отправлять строки по мере их создания, но насколько я могу судить, вы можете использовать этот подход только с SqlProcedures. Это означает, что я не могу использовать подход INSERT INTO, так как вы не можете SELECT из хранимой процедуры.
Я надеюсь, что я только что что-то пропустил и что на самом деле можно комбинировать SqlPipe.SendResultRow с функцией или что у кого-то есть умное обходное решение.
I может оставить это как proc и передать эти записи в временную таблицу с ограниченным сеансом. Затем вызывающий может использовать эту таблицу в своем предложении SELECT, но я надеюсь на лучший из всех миров, где я могу предоставить хороший, чистый синтаксис вызывающему абоненту и по-прежнему масштабироваться до большого количества записей.
Откровенно говоря, оригинальное решение, вероятно, «достаточно хорошо», поскольку мы, вероятно, никогда не захотим этого много тестовых данных, и даже если бы мы это сделали, мы могли бы запускать инструкцию INSERT несколько раз. Но я пытаюсь получить полное понимание интеграции CLR и задаюсь вопросом, как я буду обращаться к этому, если аналогичный вариант использования представлен в бизнес-сценарии.
Вы также можете вставить из прока без выбора: 'Insert Into MyTable Exec MyProc' –
Спасибо, Дейв, все еще существуют некоторые случаи использования, где он не будет соответствовать моим потребностям, но это хорошо, чтобы знать это. – dazedandconfused