Я решил создать хранимую процедуру SQLCLR для замены хранимой процедуры SQL Server из-за сложности.
Вопрос: существует ли какой-либо тип данных или ограничения API при написании хранимых процедур CLR? Если это так, может кто-нибудь дать мне какие-либо решения.
Я планирую использовать var, List<T>, DataTable, DataRow[]
и Queue
с несколькими способами расширения LINQ
.
На самом деле это довольно открытый вопрос, так как есть нюансы в том, что можно сделать в самом коде.NET/CLR и какие типы данных могут/должны использоваться в качестве параметров ввода/вывода.
Начиная с основ, нюансы зависят от того, какую версию SQL Server вы используете, и какой конкретный вопрос задают.
Поддерживаемые библиотеки.NET Framework :
Типы данных:
Поддерживаемые библиотеки.NET Framework : (добавлено 2 библиотеки, как указано ниже)
Типы данных:
Sql*
(например, SqlInt32
), используйте его; не используйте тип.NET в методе С# для входных параметров (например, int
или Int32
). Используйте только собственный тип.NET, если для типа данных SQL Server не существует типа Sql*
. Два общих экземпляра этого исключения используют object
(который может быть DbNull.Value
) для сопоставления с SQL_VARIANT
и DateTime
/DateTime?
которые отображаются в DATETIME2
.PERMISSION_SET
UNSAFE
в базу данных, в которой также находится ваш код. Вам также, вероятно, необходимо будет установить базу данных в TRUSTWORTHY ON
, чтобы установить их в UNSAFE
потому что это не представляется возможным (не так, чтобы я мог найти, так или иначе) для создания асимметричного ключа из предоставленных Microsoft DLL.List<T>
, DataTable
и DataRow[]
.Queue
или var
но не ожидал никаких проблем при их использовании.LINQ
но, похоже, вспомнил единственную проблему, заключающуюся в том, что он не был включен в набор поддерживаемых библиотек Framework SQL Server 2005, так что это не помогло мне, поскольку мне нужно поддерживать 2005 - 2014, но для любой, кто не должен беспокоиться о SQL Server 2005, должен быть в порядке.