Ответ на самом деле зависит от того, как вы пишете свой .Net код и как вы регистрируете свою сборку. По умолчанию и по общему предпочтению сборки SQLCLR создаются как SAFE, что означает, что SQL Server сканирует сборку при ее создании (фактическая инструкция CREATE ASSEMBLY), чтобы определить, соответствует ли она правилам сборки SAFE. БЕЗОПАСНАЯ сборка не имеет переменных экземпляра не только для чтения. Это означает, что все переменные являются переменными экземпляра, и если вы объявляете статическую переменную, вы должны использовать модификатор «только для чтения». Это гарантирует, что вы не делитесь данными между потоками.
ОДНАКО, вы можете создать статическую переменную в классе и изменить ее, но сборка должна быть создана как UNSAFE. Попытка создать его как SAFE приведет к следующей ошибке:
Не удалось создать CREATE ASSEMBLY, поскольку метод «MethodName» типа «ClassName» в безопасной сборке «AssemblyName» сохраняет статическое поле. Хранение в статическом поле недопустимо в безопасных сборках.
Хранение в статической переменной не является потокобезопасным, и, следовательно, вы должны дать сборке разрешение UNSAFE. Но вне этого случая SQLCLR является потокобезопасным.