Funkcja została zdefiniowana w dość prosty sposób:
[SqlFunction(DataAccess = DataAccessKind.Read,
SystemDataAccess = SystemDataAccessKind.Read)]
public static int GetDBCount()
{
using (SqlConnection conn
= new SqlConnection("context connection=true"))
{
conn.Open();
SqlCommand cmd = new SqlCommand(
"SELECT COUNT(*) AS 'NumberOfDatabases' FROM sys.databases", conn);
return (int)cmd.ExecuteScalar();
}
}
Niestety jej wykonanie kończyło się błędem:
This statement has attempted to access data whose access is restricted by the assembly.
No cóż. DataAccess = DataAccessKind.Read był wprawdzie zdefiniowany, ale moja funkcja próbowała czytać z danych systemowych. W takim przypadku trzeba dodać: SystemDataAccess = SystemDataAccessKind.Read
Cała funkcja wygląda więc teraz tak:
[SqlFunction(DataAccess = DataAccessKind.Read,
SystemDataAccess = SystemDataAccessKind.Read)]
public static int GetDBCount()
{
using (SqlConnection conn
= new SqlConnection("context connection=true"))
{
conn.Open();
SqlCommand cmd = new SqlCommand(
"SELECT COUNT(*) AS 'NumberOfDatabases' FROM sys.databases", conn);
return (int)cmd.ExecuteScalar();
}
}
Pełną listę atrybutów dla SQL CLR można znaleźć tutaj
https://msdn.microsoft.com/pl-pl/en-en/library/ms131050
i jak widać, warto do niej zaglądać!





























