Я использую хранимую процедуру более 1,5 лет. Но я никогда не задумывался о том, как данные извлекаются из пользовательского интерфейса или внутри другой хранимой процедуры.
Когда я пишу простую хранимую процедуру. например.
CREATE PROCEDURE sp_test
AS
BEGIN
SELECT * FROM tblTest --Considering table has 3 columns.
END
Как C# передает этот результат в DataTable.
Всякий раз, когда мне нужно использовать результат этой процедуры в другой процедуре, я думаю, что мы должны создать параметр с табличным значением, используя табличный тип данных, и присвоить его результат табличной переменной. Я никогда не пробовал.
CREATE PROCEDURE sp_testcall
AS
BEGIN
@temp = exec sp_test -- I think this would be the way, never tried
END
Если приведенный выше пример кода верен, то в чем разница между использованием вышеуказанного метода и запросом на вставку записей во временную таблицу?
CREATE PROCEDURE sp_test
AS
BEGIN
SELECT * INTO #tmp FROM tblTest --Considering table has 3 columns.
END
Казалось бы, копирование результата во временную таблицу требует дополнительных усилий со стороны sql-сервера. Но что будет происходить за кулисами? Будет ли он напрямую назначать ссылки на результат в параметр с табличным значением или он использует тот же процесс, что и временная таблица?
Мой вопрос может быть не ясен. Но я постараюсь улучшить.