Вы используете метод SPSDatabaseInfo.ExecuteScalar, отправляющий строку соединения вместо открытого SQLConnection, этот метод внутренне создает / открывает / закрывает свое собственное соединение.
Это означает, что ваши звонки выполняются в разных сеансах.
Используйте эту перегрузку метода ExecuteScalar, используя одно и то же соединение для обоих запросов
public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)
{
//pass through the call providing null for the set of SqlParameters
return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);
}
таким образом
using (SqlConnection cn = new SqlConnection(_connString))
{
cn.Open();
String.Format("EXEC sp_set_session_context N'TENANTID', '{0}'", tenantId);
SPSDatabaseInfo.ExecuteScalar(cn, CommandType.Text, sql);
sql = "select SESSION_CONTEXT(N'TENANTID') AS SESSION_ID";
var retVal = SPSDatabaseInfo.ExecuteScalar(cn, CommandType.Text, sql);
}