В чем разница между функцией и процедурой в SQL Server?
Это совершенно справедливый и недвусмысленный вопрос. Насколько я знаю, SO не только для вещей, которые вы не можете найти в документации, так что ...





Вы можете встраивать функции в операторы SQL, как и любые собственные функции SQL, такие как COALESCE, CONVERT и т. д. Процедуры могут возвращать значение, но возвращаемые значения ограничены. Например, если я правильно помню, вы можете вернуть табличную переменную из функции, но не из сохраненной процедуры.
Итак, с помощью функции вы можете делать такие вещи:
SELECT dbo.MyFunc(myColumn) as [Column Alias Name] FROM MyTable
или же
SELECT * FROM dbo.MyTableVariableReturningFunc() as tbl
С сохраненными процедурами вы можете получить возвращаемое значение следующим образом:
DELCARE @ReturnVal as int
EXEC @ReturnVal = USP_MyStoredProc
Еще одно отличие состоит в том, что пользовательские функции не могут изменять данные базы данных, в то время как процедуры могут.
По логике, для меня функция будет использоваться для выполнения задач общий по всей базе данных в любом запросе. С другой стороны, хранимая процедура - это то, что я бы использовал для выполнения сложных задач, выполняемых на регулярной основе, но не распространенных. Например, хранимые процедуры, которые я обычно пишу, будут извлекать данные из файла и загружать их в таблицу (одновременно выполняя многие другие операции в процессе, такие как аудит и т. д.). Это не то, что можно было бы использовать где-либо еще, но я бы запускал его один раз в день.
Разве это не то, что вы можете найти в документации? Я пытаюсь понять причину, по которой вы задаете этот вопрос.